4 votes

Lier un modèle de formulaire multiple à l'édition dans laravel

Je suis nouveau dans laravel. Peut-être que la question ne correspond pas au problème. Le problème est le suivant. J'ai une table de base de données de un à plusieurs comme hôtel et chambre. Un hôtel peut avoir plusieurs chambres. Mon objectif est le suivant :

 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);
}

Je récupère les données de la table de la chambre et de l'hôtel. Il peut y avoir plusieurs chambres.

En vue. Je veux obtenir toutes les données à éditer pour l'hôtel et la chambre.

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')) }}

Mais j'obtiens l'erreur suivante

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

J'ai défini des clés primaires dans le modèle de chambre et d'hôtel.

Schéma de la base de données.

  Hotel
  hotelId  | name             | address
  1        | example hotel       somewhere

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

2voto

leli.1337 Points 1113

Il n'y a pas de problème avec les clés primaires ou de problème avec Laravel. Le problème est que, comme le dit Laravel, vous essayez d'obtenir une propriété non définie à partir d'un fichier COLLECTION .

Une collection est un objet Laravel qui ressemble en quelque sorte à un tableau (vous pouvez en savoir plus aquí pour les collections)

Maintenant, pour résoudre votre problème, la seule chose que vous devez faire est de mettre

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

dans une boucle foreach.

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

De cette façon, vous utiliserez le objet et non le collection

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X