【问题标题】:Laravel Polymorphic Relation, create relation for a morphOneLaravel 多态关系,为 morphOne 创建关系
【发布时间】:2015-02-16 05:18:34
【问题描述】:

我被 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 表,其中列出了所有停车位和车库。如果里面/上面没有 Car 存储,您可以存储 One Car。

我想要的是为每一行制作一个管理按钮。如果存在现有的多态关系,它会找到 Car 并且您可以对其进行编辑(这已经有效),但是当没有关系时 - 所以没有附加 Car - 我想将 Car 保存在已编辑的行内。

所以我想要一种方法来为Car::create(); 填充carable_idcarable_type,但是如何实现这样的事情呢?

Model-class 具有firstOrCreate()FirstOrNew() 之类的功能,但我不知道如何实现它。

有谁知道如何做到这一点? Parkinglots/Garageboxes 内不必有汽车。

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    您可以为此使用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_typeParkingLotcarable_id 为1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-01
      • 2018-09-12
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 2020-07-31
      • 2016-03-31
      相关资源
      最近更新 更多