【问题标题】:Laravel eloquent relation search using child table recordLaravel eloquent 关系搜索使用子表记录
【发布时间】:2017-10-14 07:49:13
【问题描述】:

问题:

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

就我而言我只想要第一条记录。其中user 不为空

结果:

用户表

  • 身份证
  • 姓名
  • 电子邮件

项目标签

  • 身份证
  • 标题
  • user_id [foreign key]

我的代码是这样的

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

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

我的结果是这样的:

【问题讨论】:

  • 是否只需要获取一个用户不是null的项目(任何项目)?
  • 是的,@AlexeyMezenin。我想要用户不为空的任何项目。每当我在结果上应用这个条件时。我在第 1 页找到 6 个结果,在第 2 页找到 5 个结果,在第 3 页找到 8 个结果,依此类推.....所以,我想将此条件应用于查询而不是结果。跨度>

标签: laravel laravel-5 laravel-eloquent


【解决方案1】:

下面的代码正在运行

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

将 'with' 更改为 'whereHas' 并注意 whereHas 不接受数组作为参数 供参考Laracasts Link

【讨论】:

    【解决方案2】:

    我的问题得到了解答

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

    仅将“with”更改为“whereHas”

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

    【讨论】:

      【解决方案3】:

      你可以试试:

      $projects = App\Project::with(['user' => function ($user) {
                          $user->where('name', '=', 'Ketan');
                      }])
                      ->get();
      
      foreach ($projects as $project) {
          if($project->user != null){
              echo $project->title.' - '.$project;
          }
      }
      

      【讨论】:

      • 这不是一个好的解决方案。它将从数据库中加载每个项目,然后您可以循环并仅打印出带有用户的项目。
      猜你喜欢
      • 2021-04-10
      • 2018-07-23
      • 1970-01-01
      • 2021-02-17
      • 2016-02-18
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多