我有多张桌子。
用户可以向比赛提交参赛作品,用户可以在比赛中提交多个参赛作品。
我需要知道向特定比赛提交参赛作品的用户的电子邮件。电子邮件在用户表中。
从竞赛中获取所有参赛作品并不难,我通过以下方式完成此任务:
$entries = Contest::find(1)->entries()->first();
现在我拥有属于比赛的所有参赛作品,ID为1(例如使用)。现在,如何以有效的方式从用户表中获取所有用户电子邮件?
所以链接的三个表格,我从比赛ID开始,然后获得该比赛的所有条目,然后需要获得我尚未得到的所有用户电子邮件。
希望这是有道理的。如果没有,请离开!
答案 0 :(得分:2)
在这种情况下,可能更容易使用查询生成器而不是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并不总是最好的决定。有时,查询生成器更好/更容易。对于简单的功能和关系,Eloquent更方便。
答案 1 :(得分:1)
$getUser = Contest::find(1)->users()->get();
$getEmails = $getUser->email;
foreach($getEmails as $getEmail)
echo $getEmail;
您将获得与emails
ID 1对应的所有用户contest
。但首先您必须在model
中执行数据库关系才能使其生效。