将属性传递给Eloquent模型构造函数

sil*_*ire 5 laravel eloquent

也许我做错了,但我来自PDO的世界,我习惯于将参数传递给一个实例化的行,然后该构造函数将为我动态设置一个字段.如何通过Eloquent实现这一目标?

// Old way

$dm = new DataModel('value');
Run Code Online (Sandbox Code Playgroud)

DataModel.php

class DataModel() {
   function __construct($value = null) {
      $this->value = $value;
   }
}
Run Code Online (Sandbox Code Playgroud)

我已经读过Eloquent为您提供了一种::create()方法,但我不想在此阶段保存记录.

这里的问题是Eloquent有自己的构造函数,我不确定我的模型是否可以完全覆盖该构造函数.

Mar*_*łek 11

您可以添加到您的模型:

public function __construct($value = null, array $attributes = array())
{
    $this->value = $value;

    parent::__construct($attributes);
}
Run Code Online (Sandbox Code Playgroud)

这将做你想要的,并启动父构造函数.


luk*_*ter 5

我相信你正在寻找Laravel所谓的Mass Assignment

您只需定义一个可填充属性数组,然后在创建新对象时就可以传入这些属性.无需覆盖构造函数!

class DataModel extends Eloquent {
    protected $fillable = array('value');
}

$dataModel = new DataModel(array(
    'value' => 'test'
));
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看官方文档