Php 急着去哪里
我想按汽车id列出所有的车库,但我的做法仍然是返回关于车库的信息,即使找不到汽车,相反的情况发生了,不是什么都不返回,而是车库返回,汽车关系为空 让我举一个例子:Php 急着去哪里,php,laravel,laravel-4,eloquent,eager-loading,Php,Laravel,Laravel 4,Eloquent,Eager Loading,我想按汽车id列出所有的车库,但我的做法仍然是返回关于车库的信息,即使找不到汽车,相反的情况发生了,不是什么都不返回,而是车库返回,汽车关系为空 让我举一个例子: $garages = Garages::with(['cars'])->get(); 这样我就拥有了一切,而且我不能使用where('car\u id',1),因为表garage没有car\u id列。我找到的唯一方法是: $garages = Garages::with(['cars' => function($q)
$garages = Garages::with(['cars'])->get();
这样我就拥有了一切,而且我不能使用where('car\u id',1),因为表garage
没有car\u id
列。我找到的唯一方法是:
$garages = Garages::with(['cars' => function($q) { return $q->where('car_id', 1); }])->get();
问题是,即使找不到这辆车,它仍在从车库返回数据,我也不想这样做,因为我想在blade中使用@forelse
,而且由于它仍在返回数据,@empty
永远不会工作,我会收到错误消息,说我试图从非对象获取属性(当然,如果找不到,汽车就不存在)
是否有方法使用where
并仅在找到数据时返回数据
@编辑-关系
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');
}
}
你可以用这个
$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();
我认为你在这方面完全错了。如果你需要一辆车的车库,为什么不找到这辆车,并利用这段关系获得所有车库
$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;
}
正确设置
Cars
关系,这将由Laravel处理。我编辑过,现在您可以看到这些关系。不,您不能在嵌套关系上设置条件,根据模式的关系加载数据。这里您有一对多关系,因此它将返回一个集合。因此,您无法对集合设置条件。那么,我如何才能创建where
并通过关系检索hasmanyth之间的信息呢通过上面的答案,您可以看到这些关系。请阅读以下内容: