Php 急着去哪里

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)

我想按汽车id列出所有的车库,但我的做法仍然是返回关于车库的信息,即使找不到汽车,相反的情况发生了,不是什么都不返回,而是车库返回,汽车关系为空

让我举一个例子:

$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之间的信息呢通过上面的答案,您可以看到这些关系。请阅读以下内容: