我想通过汽车 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/

10-14 15:01
查看更多