извините за заголовок этого вопроса, но я не знаю, как его задать ...
Я работаю над проектом, в котором у меня есть две модели Поезда и Автомобили, к этой модели у меня есть принадлежащий Маршрут.
Я хочу сделать запрос и проверить, равен ли routeable_type
App\Car
, чем при выбранном routeable_id
, чтобы получить данные из автомобиля. И если routeable_type
- поезд, то с идентификатором, чтобы получить данные из Тран.
Итак, мои модели выглядят так:
Поезд:
class Train extends Model
{
public function routes()
{
return $this->morphMany('App\Route', 'routeable');
}
}
Автомобиль:
class Car extends Model
{
public function routes()
{
return $this->morphMany('App\Route', 'routeable');
}
}
Маршрут:
class Route extends Model
{
public function routeable()
{
return $this->morphTo();
}
}
И запрос, который у меня есть на данный момент:
$data = Route::leftjoin('cars', 'cars.id', '=', 'routes.routeable_id')
->leftjoin('trains', 'trains.id', '=', 'routes.routeable_id')
->select('routes.id', 'cars.model AS carmodel', 'trains.model AS trainmodel', 'routeable_type', 'routes.created_at');
С помощью этого запроса, если у меня один и тот же идентификатор в машинах и поездах, я получаю данные обоими и все портит. Как я могу проверить, если routeable_type - это Car ... сделать это, если routeable_type - Train ... сделать это?
Будет ли что-то подобное возможно в одном запросе:
$data = Route::select('routes.id', 'routeable_type', 'routes.created_at');
if(routeable_type == 'Car'){
$data = $data->leftjoin('cars', 'cars.id', '=', 'routes.routeable_id')->select('routes.id', 'cars.model AS carmodel', 'routeable_type', 'routes.created_at');
}else{
$data = $data->leftjoin('trains', 'trains.id', '=', 'routes.routeable_id')->select('routes.id', 'trains.model AS trainmodel', 'routeable_type', 'routes.created_at');
}