【问题标题】:Laravel Querying Relationship ExistenceLaravel 查询关系是否存在
【发布时间】:2018-11-19 19:18:22
【问题描述】:

我的 Laravel 控制器中有以下查询:

public function getTeams(){      
  $teams = Team::whereHas('submissions', function($q){
    $q->limit(1);
  })->with(['submissions'])->get();

  return response()->json(['data'=>$teams]);
}

团队模型:

   public function submissions(){
        return $this->hasMany('App\submission', 'team_id', 'id');
    }

提交模型:

public function team(){
    return $this->belongsTo('App\Team', 'id', 'team_id');
}

现在我试图在 getTeams 方法中只提交一份。但是限制功能无法正常工作。它不返回任何错误。它返回每个团队的所有提交。我只想要 1 次提交。如何让它发挥作用?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:
     $teams = Team::whereHas('submissions')
        ->with([
            'submissions' => function($query) {
                $query->limit(1);
            }
        ])->get();
    

    【讨论】:

    • @WahyuKristianto 你是什么意思?
    • @user8501960 我的回答对你有帮助吗??
    • @Davit 并不是我想要的。使用您的代码,它只返回 1 个团队。但是在查看了您的代码后,我得到了想要的东西。谢谢
    【解决方案2】:

    没有简单的方法来限制急切加载。

    您可以使用HasOne 关系:

    public function submission() {
        return $this->hasOne('App\submission', 'team_id', 'id');
    }
    
    $teams = Team::has('submission')->with('submission')->get();
    

    这仍将在后台获取所有提交,但每个$team 仅显示一个。

    顺便说一句:您可以通过删除 has('submission') 并在之后过滤团队来改进查询。

    $teams = Team::with('submission')->get();
    $teams = $teams->where('submission', '!==', null)
    

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 2014-08-24
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多