使用子表记录的Laravel雄辩关系搜索

时间:2017-10-14 07:49:14

标签: laravel laravel-5 laravel-eloquent

问题:

我只想要那些关系记录[user]不为空的记录。

在我的情况下我只想要第一条记录。其中user不为空

结果: enter image description here

用户表

  • ID
  • 名称
  • 电子邮件

项目标签

  • ID
  • 标题
  • user_id [foreign key]

我的代码就像这样

$projects = App\Project::with(['user' => function ($user) {
                    $user->where('name', '=', 'Ketan');
                }])
                ->get();

foreach ($projects as $project) {
    echo $project->title.' - '.$project;
}

我的结果是这样的: enter image description here

3 个答案:

答案 0 :(得分:1)

以下代码正在运作

$projects = App\Project::whereHas('user', function ($user) {
              $user->where('name', '=', 'Ketan');
           }])->get();

使用'更改'到' whereHas'并注意whereHas不接受数组作为参数 供参考Laracasts Link

答案 1 :(得分:-1)

您可以尝试:

$projects = App\Project::with(['user' => function ($user) {
                    $user->where('name', '=', 'Ketan');
                }])
                ->get();

foreach ($projects as $project) {
    if($project->user != null){
        echo $project->title.' - '.$project;
    }
}

答案 2 :(得分:-1)

我解决了我的问题

$projects = App\Project::whereHas(['user' => function ($user) {          <--Change Here
                    $user->where('name', '=', 'Ketan');
                }])
                ->get();

更改&#39;用&#39;到&#39; whereHas&#39;

通过这个解决方案,我只得到那些用户(关系记录)不为空的项目记录。