Попытка преобразовать запрос в raw mysql в красноречивые запросы laravel. Я застрял при попытке получить внешние элементы (от других моделей) внутри него … В основном это «цвет» (который исходит от BookingStatus и создающий URL и помещающий его как URL).
Не могли бы вы помочь мне?
Вот запрос mysql:
$booking = DB::table('bookings')
->select('bookings.id as id', 'booking_reference as description', 'booking_status as title', 'color', DB::raw('concat("http://127.0.0.1/blabla/public/profile/Calendar/detail/",bookings.id) as url'),'booking_date as start')
->join('booking_status','booking_status.id','=','bookings.bookingstatus_id')
->where('photographer_id', '=', $photographer->id)
->union(DB::table('bookings')
->select('bookings.id as id', 'booking_reference as description', 'booking_status as title', 'color',DB::raw('concat("http://127.0.0.1/KYMA/public/profile/Calendar/detail/",bookings.id) as url'),'booking_date as start')
->join('booking_status','booking_status.id','=','bookings.bookingstatus_id')
->where('user_client_id', '=', $user->id)
)
->get();
Отредактировано: И вот, где я зашел так далеко
$booking_info = Booking::with('bookingStatus')
->where('photographer_id', $photographer->id)
->orWhere('user_client_id', $user->id)
->select(['id as id', 'booking_reference as description','booking_date as start', 'bookingstatus_id as title'])
->get();
Я попробовал несколько вещей с цветом и прочитал документы Laravel, но я просто не могу понять это правильно … Как передать это в моем запросе select? Если я просто добавлю ‘color’, он, очевидно, не поднимет его, потому что он находится в прикрепленном массиве, а не в «основном» …
Большое спасибо за вашу помощь!!
///// РЕДАКТИРОВАТЬ /////
Вот решение, которое я нашел способным передавать все, что я хочу, я не использую модель отношений, так как не мог понять, как передать их значения массива в моем запросе выбора …
$booking_info = Booking::where('photographer_id', $photographer->id)
->orWhere('user_client_id', $user->id) //because he could be client of a shoot ;-)
->join('booking_status','booking_status.id','=','bookings.bookingstatus_id')
->join('shooting_types', 'shooting_types.id', '=', 'bookings.stype_id')
->join('users', 'users.id', '=', 'user_client_id')
->join('addresses', 'addresses.id', '=', 'users.address_id')
->select('bookings.id as id', 'first_name', 'phonenumber', 'booking_reference as description', 'stype_name as title', 'color', 'booking_date as start')
->get();
Вы можете использовать:
$bookings = Booking::with('booking_status')
->where('photographer_id', $photographer->id)
->orWhere('user_client_id', $user->id)
->get();
конечно нужно иметь status
отношения между Booking
а также Status
И если у вас есть color
колонка в вашем BookingStatus
модель, вы можете получить к нему доступ сейчас:
foreach ($bookings as $b) {
echo $b->booking_status->color;
}
Использование Raw SQL не рекомендуется, если API ядра модели можно вызывать непосредственно в контроллере, связывая его с другой таблицей. Я бы предложил использовать ядро API моделей с отношениями.
Например
$bookings = Booking::with('booking_status')
->where('photographer_id', $photographer->id)
->get();
Приведенный выше пример кода является лишь примером использования красноречивых ассоциаций в контроллере. Однако вам нужно будет внести изменения в вышеуказанные условия в соответствии с вашими требованиями.
Замечания: Приведенный выше код будет работать, только если вы определили ассоциации во всех соответствующих моделях. Например, модель Booking должна иметь ассоциацию «hasMany» с моделью BookingStatus, и аналогично модель BookingStatus должна иметь ассоциацию «ownTo» с таблицей Booking. Таким образом, вам не нужно писать собственные запросы.