将对象传递给Laravel创建方法的优雅方式

时间:2019-07-30 01:04:03

标签: laravel-5

在Lavarel 5中,有没有更优雅的方法可以执行以下操作?

MyModel::create([
    'my_other_model_id' => $my_other_model->id,
    'my_other_other_model_id' => $my_other_other_model->id,
]);

我想直接传递$my_other_model$my_other_other_model,而不会因id而感到烦琐。

1 个答案:

答案 0 :(得分:1)

使用Mutators,可以使用以下更精美的代码。

MyModel::create([
    'my_other_model' => $my_other_model,
    'my_other_other_model' => $my_other_other_model,
]);

App / MyModel.php

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class MyModel extends Model {
  protected function setMyOtherModelAttribute(MyOtherModel $my_other_model) {
    $this->attributes['my_other_model_id'] = $my_other_model->getKey();
  }

  protected function setMyOtherOtherModelAttribute(MyOtherOtherModel $my_other_other_model) {
    $this->attributes['my_other_other_model_id'] = $my_other_other_model->getKey();
  }
}

Mutator方法称为set +«PascalCase(attribute_name)»+ Attribute。上面的代码还允许执行以下操作:

$my_model = new MyModel;
$my_model->my_other_model = $my_other_model;
$my_model->my_other_other_model = $my_other_other_model;
再次

不引用任何id