努力用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();
然后我需要使用创建的$ reservation在产品链接表中创建条目,因此需要能够访问新创建的预订及其与产品的关系。
我可以使用$customer->reservation()->save($reservation);
创建条目但是我似乎没有$ reservation对象可以使用(或者我?)
我对这些关系非常困惑,非常感谢所有帮助,以了解如何让这个工作
由于
这是我在模特中的关系:
Customer Class:
public function reservation() {
return $this->hasMany('Reservation');
}
Reservation Class:
public function customer() {
return $this->belongsTo('Customer');
}
唯一可行的方法是$customer->reservation()->save($reservation);
- 所以我认为这是正确的方法,并且必须重新编写代码。 associate()
更新:在mysql中重新创建我的表 - 我现在可以按预期保存原始预订记录,然后使用以下方式关联到客户记录:
$reservation->customer()->associate($customer)
这需要一段时间才能和我一起沉浸其中!
答案 0 :(得分:3)
第1部分
由于客户有多个预订,因此您需要客户ID才能添加预订。
代码,
您需要首先获得拥有预订的客户
$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部分
关于你的问题:
“我可以使用$ customer-> reservation() - > save($ reservation)创建条目;但是我似乎没有$ reservation对象可以使用(或者我?)”
您可以使用
获取客户的所有预订$reservations = $customer->reservation->get();
//where customer is the one you had on Customer::find($id);
然后您可以逐个循环预订。 (虽然我认为你可能想要预订ID,所以上面的第一种方法更好)