在laravel中获取外键数据

时间:2019-04-11 16:07:37

标签: laravel laravel-5 eloquent relation

我有两个表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');
 }`

这是数据库列图片: Room images tbl

Room tbl

2 个答案:

答案 0 :(得分:1)

以下内容应从您的模型返回该关系的实例。

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

您将能够从tbl_roomimages这样访问列数据

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

答案 1 :(得分:1)

好吧,我有几件事情要给你。让我们看看我怎么做。

首先,您的模型存在的问题:

您具有用前导“ 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'));