我想按汽车内容列出所有车库,但是即使汽车没有找到,我仍然在做关于车库的信息,反之亦然,而不是没有回复,车库返回,车关系为空。
让我举一个例子:
$garages = Garages::with(['cars'])->get();
这样我就拥有了所有内容,而我无法使用->where('car_id', 1)
因为表格garage
没有car_id
列。我发现的唯一方法就是这样:
$garages = Garages::with(['cars' => function($q) { return $q->where('car_id', 1); }])->get();
问题在于即使汽车还没有找到从车库返回的数据,我也不想这样,因为我想在刀片中使用@forelse
,因为它仍然会返回数据@empty
永远不会有效,而且我收到的错误是说我试图从非对象中获取属性(当然,如果找不到,汽车也不会存在)。
有没有办法使用where
并仅在找到数据时返回数据?
@edit - 关系
class Users extends Eloquent
{
public function cars()
{
return $this->hasMany('cars');
}
public function garages()
{
return $this->hasManyThrough('garages', 'cars', 'garage_id', 'garage_id');
}
}
class Garages extends Eloquent
{
public function cars()
{
return $this->hasMany('cars');
}
}
class Cars extends Eloquent
{
public function users()
{
return $this->belongsTo('users');
}
public function garages()
{
return $this->belongsTo('Garages');
}
}
答案 0 :(得分:2)
你可以使用它。
$garages = Garages::with(['cars' => function($q) { $q->where('car_id', 1); }])
->whereHas('cars', function($q) { $q->where('car_id', 1); })
->get();
<强>更新强> 我找到了另一种方法来做这件事。
$garages = Garages::has('cars')
->with(['cars'])
->get();
答案 1 :(得分:2)
我认为你对此完全没错。如果您需要一辆车的车库,为什么不找到这辆车并使用这种关系获得所有车库?
$user = User::find(1);
$garages = $user->garages;
foreach($garages as $garage){
// just an example, you'll have to use your real properties
echo 'Address: ' . $garage->address;
echo 'Name: '. $user->name;
}