2013-09-14 2 views
0

Борьба за обновление моего кода с помощью laravel отношений.Laravel - запись с сохранением ошибки с одним отношением

У меня есть две таблицы. Клиент и бронирование с Клиентом, имеющим hasMany отношения с резервированием и резервированием, имеющие отношение к Клиенту.

Таблица резервирования также имеет много-много отношений с таблицей продуктов через таблицу ссылок.

Я получаю запись о клиентах в порядке, и теперь мне нужно создать заказ для клиента.

Я предполагаю, что этот процесс: создать объект бронирования, приложить заказ клиента, а затем связаться с ним. (таблица резервирования имеет несколько отношений, но я пока буду работать)

Если я попробую этот код, я получаю сообщение об ошибке Field 'customer_id' doesn't have a default value - таблица базы данных допускает null, и нет установленных правил проверки, поэтому предположим, что это делать с отношениями, которые я создал.

`$reservation = new Reservation; 

     $reservation->play_date=$play_date->format('Y-m-d'); 
     $reservation->booked_date=$booked_date->format('Y-m-d'); 
     $reservation->am_tee=$am_time->format('H:i:s'); 
     $reservation->pm_tee=$pm_time->format('H:i:s'); 
     $reservation->save(); 

     $customer->reservation()->associate($reservation);` 

Ошибка происходит с $reservation->save();

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

я могу создать запись с помощью $customer->reservation()->save($reservation);, но тогда я, кажется, не есть объект $ резервирования для работы с (или я?)

Я очень запутываемый отношений так благодарен за помощь чтобы понять, как заставить это работать

Благодаря

вот мои отношения в моделях:

Customer Class: 

     public function reservation() { 
       return $this->hasMany('Reservation'); 
      } 

Reservation Class: 

public function customer() { 
     return $this->belongsTo('Customer'); 
    } 

только мето d, который, как представляется, работает $customer->reservation()->save($reservation); - поэтому я предполагаю, что это правильный метод и придется переработать мой код. associate()

обновления: воссоздана моя таблица в MySQL - теперь я могу сохранить оригинальную запись резервирования, как ожидается, а затем сопоставить записи клиента с помощью:

$reservation->customer()->associate($customer) 

Это занимает некоторое время для того, чтобы утонуть в с меня!

+0

Я не уверен, что я понимаю, как '$ customer-> reservation() -> save ($ reserve);' ведет себя иначе, чем '$ customer-> reservation() -> associate ($ reserve);' таким образом, чтобы создать проблему? Можете ли вы показать свои методы отношений, созданные как в моделях клиента, так и в резервировании? – fideloper

+0

Где вы определяете '$ customer'? – Firo

+0

$ клиент определяется ранее в коде с помощью Customer :: find ($ id); – Ray

ответ

3

ЧАСТЬ 1

так hasMany клиентов Бронирование, вам нужен идентификатор клиента, прежде чем вы можете добавить оговорку.

на код,

вы должны получить клиента первое, что владеет бронирование

$customer = Customer::find($id); 

теперь

$reservation = new Reservation; 

$reservation->customer_id = $customer->id;  
$reservation->play_date=$play_date->format('Y-m-d'); 
$reservation->booked_date=$booked_date->format('Y-m-d'); 
$reservation->am_tee=$am_time->format('H:i:s'); 
$reservation->pm_tee=$pm_time->format('H:i:s'); 
$reservation->save(); 

Затем $reservation->save(); должен преуспеть в настоящее время.

ЧАСТЬ 2

на ваш вопрос:

«Я могу создать запись с помощью $ на клиента> резервирование() -> сохранить ($ резервирования), но тогда я, кажется, не есть объект $ резервирования для работы с (или я?)»

вы можете получить все оговорки клиента с помощью

$reservations = $customer->reservation->get(); 
//where customer is the one you had on Customer::find($id); 

вы ча n затем поочередно опираются на оговорки. (хотя я думаю, что вам могут понадобиться идентификаторы резервирования, поэтому лучший подход выше)

Смежные вопросы