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() 为每个人创建了一个新查询。我怎样才能避免这种情况并通过第一次查询获得所需的汽车数据?
当以这种方式使用时,会进来一个查询关系数据。
示例:
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
时,它仅指已经加载的集合。
希望对您有所帮助
我有一个人物模型。每个人可能拥有零辆或多辆汽车:
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() 为每个人创建了一个新查询。我怎样才能避免这种情况并通过第一次查询获得所需的汽车数据?
当以这种方式使用时,会进来一个查询关系数据。
示例:
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
时,它仅指已经加载的集合。
希望对您有所帮助