Laravel 5 是否可以在另一个“whereHas”中使用“whereHas”-查询的结果?

Laravel 5 是否可以在另一个“whereHas”中使用“whereHas”-查询的结果?,laravel-5,eloquent,Laravel 5,Eloquent,我想将一个子查询的结果与另一个子查询(共享相同关系)的结果进行过滤。大概是这样的: modelA::whereHas('modelB', function ($query) { $query->select('modelC_id'); }) ->whereHas('modelD', function ($query) { $query->where('field', 'modelC_id') }); 对于本例,假设以下关系: modelA->hasMany(

我想将一个子查询的结果与另一个子查询(共享相同关系)的结果进行过滤。大概是这样的:

modelA::whereHas('modelB', function ($query) {
    $query->select('modelC_id');
})
->whereHas('modelD', function ($query) {
    $query->where('field', 'modelC_id')
});
对于本例,假设以下关系:

  • modelA->hasMany('modelB')
  • modelA->hasMany('modelD')
  • modelB->hasOne('modelC')
  • modelD->hasOne('modelC')
模型和关系都正常工作,但我希望modelA通过modelB查找modelC值,然后使用它通过modelD过滤modelC上的查找

我可以通过查找该值并在第二个查询中使用它来完成所有这一切,但是如果我可以在一个语句中使用它(因为可以在查询中查找该值!),那么我就可以在modelA上创建一个局部范围了

另一个选项是将相关字段添加到结果集中,然后我可以在
where
-查询中使用该字段,但我无法确定如何在结果集中获取
modelC\u id


这可能吗?

在您的问题中显示DB模式和关系。我试图再解释一点,希望这有助于您找到这个问题的解决方案吗?我正在寻找相同的解决方案我最终使用了一个带有自定义查询的局部作用域(使用querybuilder),因此更多的是一个解决方法,而不是这个问题的答案…显示问题中的DB模式和关系。我尝试了更多的解释,希望这有助于您找到这个问题的解决方案吗?我正在寻找相同的解决方案,我最终使用了一个带有自定义查询的本地范围(使用querybuilder),因此更多的是一个解决方法,而不是这个问题的答案。。。