我想通过汽车 id 列出所有车库,但是即使没有找到汽车,我仍然返回有关车库的信息的方式,相反的情况发生,而不是没有任何返回,车库返回与汽车关系为空的。
让我举个例子:
$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();
问题是,即使没有找到汽车仍然从车库返回数据,我不希望那样,因为我想在 Blade 中使用
@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');
}
}
最佳答案
我认为你在这件事上完全错了。如果您需要一辆车的车库,为什么不找到这辆车并使用关系获取所有车库?
$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;
}
关于php - 热切加载 where,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27511020/