在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
而感到烦琐。
答案 0 :(得分:1)
使用Mutators,可以使用以下更精美的代码。
MyModel::create([
'my_other_model' => $my_other_model,
'my_other_other_model' => $my_other_other_model,
]);
<?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
。