Получить данные внешнего ключа в laravel - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть две таблицы: room и room_images.В таблице room_images у нас есть несколько изображений одной комнаты.Теперь я хочу показать эти изображения в шаблоне редактирования комнаты.


    rooms table:   | room_image table:
    id (PK)        | id
    title          | room_id (FK)
    desc           | room_image

Контроллер редактирования комнаты

`public function edit($id)
 { 
    $room = Room::find($id);
    if(auth()->user()->id !== $room->user_id){
        return redirect('/rooms')->withStatus(__('Unauthorized Page'));
    }
    return view('rooms.edit')->with('room' , $room);
 }`

Модал комнаты: Room.php

`public function user()
 {
    return $this->belongsTo('App\User');
 }
 public function tbl_roomimages()
 {
    return $this->hasMany('App\RoomImage');
 }`

Изображение комнаты Модальное: RoomImage.php

`public function tbl_rooms()
 {
   return $this->belongsTo('App\Room','room_id');
 }`

Вот изображения столбца базы данных: Изображения комнат tbl

Номер Табл

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Хорошо, у меня есть пара вещей для тебя.Давайте посмотрим, как я это сделаю.

Во-первых, проблема с вашими моделями:

У вас есть функции отношений, названные с ведущим "tbL_", который в Laravel собираетсявлияет на внешний ключ, который они ищут.Вместо этого вам нужно использовать чехол змея.Так, например, ваши отношения Room-RoomImages должны быть такими:

 public function room_images()
 {
    return $this->hasMany('App\RoomImage');
 }`

[Краткое примечание: на самом деле это может быть просто стандартное соглашение об именах.В любом случае, это хорошая практика, но я могу ошибаться в связи с внешним ключом.Не стесняйтесь звонить мне по этому поводу.]

Затем контроллер

Затем, для повышения эффективности, я рекомендую "нетерпеливую загрузку""изображения вашей комнаты.Итак, в контроллере перейдите к следующему:

$room = Room::with("room_images")->find($id);

Затем, наконец, на ваш взгляд

Предполагая, что "room_image" на самом деле является значением "src", сделайте это:

@foreach($room->room_images as $img)

   <img src="{{ $img->room_image }}" />

@endforeach

И, предполагая, что это действительно просто путь src, я действительно рекомендую изменить имя поля, чтобы отразить это, чтобы избежать путаницы.

ТеперьПарочка советов:

Один: "Модал" -> "Модель".(Модальное - это всплывающее окно.)

Два: если вы используете compact (), вы можете сэкономить много избыточности, если у вас много переменных для передачи в представление.

return view('rooms.edit')->with(compact('room', 'room_images', 'otherthing'));
1 голос
/ 11 апреля 2019

Следующее должно вернуть экземпляр отношения из вашей модели.

$roomImages = $room->tbl_roomimages()->get();

Вы сможете получить доступ к данным столбца из tbl_roomimages, например

foreach($roomImages as $roomImage)
{
     $roomImage->room_image;
}
...