У меня есть две таблицы, одна записывает данные о транспортном средстве, а другая записывает местоположение транспортного средства в определенные дни.
Я хочу взять номер транспортного средства и тип транспортного средства, которое имеет определенную вместимость и его местонахождение на определенную дату.
Пример: все автомобили грузоподъемностью 9 т и их местонахождение на 07.08.2019.
Я пытался использовать соединения и подзапросы, чтобы получить точный результат, но ни один из них не сработал.
Это мой текущий код, и он выводит несколько записей для одного и того же автомобиля.
$vehicles = DB::table('vehicles as v')
->leftJoin('current_location as l', 'v.vehicle_id', '=', 'l.vehicle_id')
->leftJoin('locations as k', 'l.location_id', '=', 'k.location_id')
->select('v.vehicle_id as vehicle_id','v.type as type','v.capacity as capacity', 'k.location as location')
->where('v.capacity', $request->capacity)
// ->where(function($query) use ($request)
// {
// $query->where('l.date', $request->date)
// ->orWhere('l.date', null)
// })
->get();
Ожидаемый результат — это список транспортных средств с заданной вместимостью и их местоположениями на заданную дату, если существует запись о местоположении на данную дату.






Этого легко добиться с помощью Красноречивый.
В Vehicle.php
public function currentLocations()
{
return $this->hasMany(CurrentLocation::class, 'vehicle_id', 'vehicle_id');
}
В модели CurrentLocation.php
public function location()
{
return $this->belongsTo(Location::class, 'location_id', 'location_id');
}
Vehicle::with(['currentLocations' => function($q) {
$q->where('date', request('date'));
}, 'currentLocations.location'])
->where('capacity', request('capacity'))
->get();
Я рад слышать, что это помогло!