查询3个表mysql Laravel


Querying 3 tables mysql Laravel

我有多个表

  • 比赛
  • <
  • 条目/gh>用户

用户可以向竞赛提交参赛作品,一个用户可以向竞赛提交多个参赛作品

我需要知道提交了一个特定的比赛条目的用户的电子邮件。电子邮件在用户表中

从比赛中获得所有参赛作品并不难,我通过以下方式完成:

$entries = Contest::find(1)->entries()->first();

现在我有所有属于比赛的id为1的条目(例如使用)。现在,如何有效地从users表中获取所有用户的电子邮件呢?

这是三个链接的表,我从竞赛id开始,然后获得该竞赛的所有条目,然后需要获得所有用户的电子邮件,我还没有能够获得。

希望这是有意义的。如果没有,那就问吧!

在这种情况下使用Query Builder可能比Eloquent更容易:

// Get array of users that submitted entries to contest ID 45
$users = DB::table('contests AS c')
  ->join('entries AS e','e.contest_id','=','c.id')
  ->join('users AS u','e.user_id','=','u.id')
  ->where('c.id','=',45) // Contest ID
  ->get();
//or get an array of emails:
$users = DB::table('contests AS c')
  ->join('entries AS e','e.contest_id','=','c.id')
  ->join('users AS u','e.user_id','=','u.id')
  ->where('c.id','=',45) // Contest ID
  ->lists('email');

在Laravel中,雄辩并不总是最好的决定。有时查询生成器更好/更容易。对于简单的功能和关系,Eloquent更方便。

$getUser = Contest::find(1)->users()->get();
$getEmails = $getUser->email;
foreach($getEmails as $getEmail)
    echo $getEmail;

您将获得与contest id 1对应的所有用户emails。但首先你必须做的数据库关系在model得到这个工作。