1

我有多个表。

  • 比赛
  • 参赛作品
  • 用户

用户可以向竞赛提交条目,用户可以向竞赛提交多个条目。

我需要知道向特定比赛提交参赛作品的用户的电子邮件。电子邮件在用户表中。

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

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

现在,我拥有属于比赛的所有条目,ID 为 1(例如使用)。现在,我如何以有效的方式从我的用户表中获取所有用户电子邮件?

所以三个链接的表,我从比赛 id 开始,然后从该比赛中获取所有条目,然后需要获取我还无法获得的所有用户电子邮件。

希望这是有道理的。如果没有,请走开!

4

2 回答 2

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 对于简单的功能和关系更方便。

于 2013-06-20T19:42:28.517 回答
1
$getUser = Contest::find(1)->users()->get();
$getEmails = $getUser->email;

foreach($getEmails as $getEmail)
    echo $getEmail;

您将获得与 id 1emails相对应的所有用户contest。但首先您必须执行数据库关系model才能使其正常工作。

于 2013-06-23T21:59:24.403 回答