Я хочу перечислить все гаражи по идентификатору автомобиля, но так, как я делаю, все еще возвращается информация об гаражах, даже если автомобиль не найден, наоборот, вместо того, чтобы ничего не вернуть, гаражи возвращаются с автомобилями как пустые.Eager Loading with where
Позвольте мне в качестве примера:
$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');
}
}
Настройте отношения «Автомобили» правильно, и это будет обрабатываться Laravel. – ceejayoz
Я редактировал, и теперь вы можете видеть отношения. – yayuj