Я хочу перечислить все гаражи по идентификатору машины, но при этом я по-прежнему возвращаю информацию о гаражах, даже если машина не найдена, происходит обратное, вместо того, чтобы ничего не возвращать, гаражи возвращаются с автомобильными отношениями как пустой.
Позвольте мне привести пример:
$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');
}
}
Я думаю, что вы все не так по этому поводу. Если вам нужны гаражи одной машины, почему бы не найти машину и получить все гаражи, используя отношения?
$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;
}
Вы можете использовать это.
$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();