我坚持使用Laravel(4)中的多态关系绑定。模型名称可以使其更清晰。
<?php
class Car extends Model {
protected $fillable = ['license_plate'];
public function carable()
{
return $this->morphTo();
}
}
class Parkinglot extends Model {
protected $fillable = ['in_shadow'];
public function carable()
{
return $this->morphOne('Car', 'carable');
}
}
class Garagebox extends Model {
protected $fillable = ['can_lock'];
public function carable()
{
return $this->morphOne('Car', 'carable');
}
}
一辆车可以存放在停车场或车库中。 ParkingLots和Garagebox可以无限制地创建。
我有一个html-Table,其中列出了所有Parkingslots和Garageboxes。如果其中没有存储汽车,您可以存储一辆汽车。
我想要的是为每一行制作一个管理按钮。如果存在一个现有的多态关系,它会发现Car并且您可以编辑它(已经可以工作),但是当没有关系时 - 所以没有Car附加 - 我想将Car保存在已编辑的行内。
所以我希望能够为carable_id
填充carable_type
和Car::create();
,但是如何实现这样的目标呢?
Model-class具有firstOrCreate()
和FirstOrNew()
等功能,但我无法弄清楚如何实现这一功能。
任何人都知道如何实现这一目标? Parkinglots / Garageboxes不需要内置汽车。
答案 0 :(得分:0)
您可以使用firstOrNew
。 firstOrNew
不保存新模型,它只是为您提供了可以保存的模型。
$car = Car::firstOrNew([
'make' => 'BMW',
'model' => '123d',
'registration' => 'YK10HMC'
]);
然后你可以检查模型是否是新模型并从中分支。
if ($car->exists)
{
// It was retrieved from DB as an existing car
}
else
{
// It is a new model and hasn't been saved yet
}
为了将汽车保存到很多地方或车库,在这种情况下很多:
$storage = ParkingLot::find(1);
$storage->carable()->save($car);
现在,该车的carable_type
ParkingLot
和carable_id
为1。