php – 绑定多个表单模型以在laravel中编辑

我是laravel的新手.可能是问题没有匹配问题.问题是.我有数据库表一对多像酒店和房间.一个酒店可以有多个房间.我的目标是:

 public function edit($id) {
    echo $id;
    // get the hotel
    $data['hotel'] = Hotel::find($id);
    $data['rooms'] = Room::where("hotelId", $id)->get();

    // show the edit form and pass the hotel
    return view('include.middle')->nest('main', 'hotel.edithotel', $data);
}

我从房间和酒店的桌子上获取数据.毫无疑问,可以有多个房间.

在视野中.我想获取酒店和房间的所有数据.

editHotel.blade.php

 //for hotel
 {{ Form::model($hotel, array('route' => array('hotel.update', $hotel->hotelId), 'method' => 'PUT')) }}

 //for room.  I want to run this in loop so that I can get data to edit for multiple rooms.
 {{ Form::model($rooms, array('route' => array('room.update', $rooms->roomId), 'method' => 'PUT')) }}

但我得到的错误是

 Undefined property: Illuminate\Database\Eloquent\Collection::$roomId (View: /Users/apple/hotelbooking/resources/views/hotel/edithotel.blade.php)

我在房间和酒店模型中设置了主键.

数据库架构.

  Hotel
  hotelId  | name             | address
  1        | example hotel       somewhere

  Room
  roomId   | hotelId   |  name  | price 
  1           1           Delux    $300
  2           1           Economy  $100

最佳答案 主键没有任何问题或laravel有任何问题.

问题是你像laravel所说的那样,试图从COLLECTION中获取一个未定义的属性.

一个集合是一个Laravel对象,它有点像一个数组(你可以读取更多here的集合)

现在要解决你的问题,你唯一需要做的就是放

{{ Form::model($rooms, array('route' => array('room.update', $rooms->roomId), 'method' => 'PUT')) }}

在foreach循环中.

@foreach($rooms as $room)
{{ Form::model($room, array('route' => array('room.update', $room->roomId), 'method' => 'PUT')) }}
@endforeach

这样您将使用对象而不是集合

点赞