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

时间:2016-10-27 15:10:28

标签: php laravel-5.2 laravel-blade

我是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

1 个答案:

答案 0 :(得分:2)

主键没有任何问题或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

这样您就可以使用对象而不是集合