Laravel - select 与一个查询有关系

Laravel - select with relationship with one query

我有一个人物模型。每个人可能拥有零辆或多辆汽车:

class Person extends Model
{
    public function cars()
    {
        return $this->hasMany('App\Car');
    }
}

我希望 select 并通过一个 运行 查询显示所有拥有福特的人。所以我尝试了这个:

$persons = Person::whereHas('cars', function ($query) {
    $query->where('mark', 'ford');
})->get();

foreach ($persons as $person) {
    foreach($person->cars()->get() as $car) {
        print $person->name . " has a " . $car->mark . $car->model
    } 
}

$persons 是通过一个查询获得的,但是在 foreach 循环中 $person->cars()->get() 为每个人创建了一个新查询。我怎样才能避免这种情况并通过第一次查询获得所需的汽车数据?

值得研究:laravel Eager Loading

当以这种方式使用时,会进来一个查询关系数据。

示例:

Person::with('cars')->get();

此代码响应: 人物数据与人物汽车数据

您必须将 mark 过滤器添加到 whereHas()with():

$persons = Person::whereHas('cars', function ($query) {
    $query->where('mark', 'ford');
})->with(['cars' => function($query) {
    $query->where('mark', 'ford');
}])->get();

问题在cars()

使用下面给出的片段

foreach ($persons as $person) {
     foreach($person->cars as $car) 
       { 
         print $person->name . " has a " . $car->mark . $car->model
        } 
      }

当您执行 cars() 时,它指的是执行另一个查询的模型。但是当你使用 cars 时,它仅指已经加载的集合。

希望对您有所帮助