Laravel Polymorphic Relation,为morphIne创建关系

时间:2014-12-17 15:41:20

标签: laravel laravel-4 eloquent

我坚持使用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_typeCar::create();,但是如何实现这样的目标呢?

Model-class具有firstOrCreate()FirstOrNew()等功能,但我无法弄清楚如何实现这一功能。

任何人都知道如何实现这一目标? Parkinglots / Garageboxes不需要内置汽车。

1 个答案:

答案 0 :(得分:0)

您可以使用firstOrNewfirstOrNew不保存新模型,它只是为您提供了可以保存的模型。

$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 ParkingLotcarable_id为1。