【问题标题】:Laravel 5.3 $model->save() values are always null however mass assignment worksLaravel 5.3 $model->save() 值始终为空,但是批量分配有效
【发布时间】:2016-12-14 21:01:31
【问题描述】:

型号

class Flight extends Model
{
    protected $fillable = ['name'];

    public $name;
}

在控制器中

Flight::create(['name' => 'test']);
$flight = new Flight();
$flight->name = 'John';   //echo $flight->name 'John' it works
$flight->save();

批量分配创建工作,但是方法 ->save() 为对象存储了一个空值。我不明白我做错了什么。请帮忙!

【问题讨论】:

    标签: laravel model save mass-assignment


    【解决方案1】:

    好吧,首先,从你的模型中删除public $name;,你为什么需要它?

    其次,两者兼而有之:

    Flight::create(['name' => 'test']);
    

    $flight = new Flight();
    $flight->name = 'John';
    $flight->save();
    

    是正确的。

    你从哪里得到null

    【讨论】:

    • Null 正在保存到数据库中。我刚刚了解到 $flight->fill(['name' => 'john]) $flight->save(); //现在它将保存。为什么没有填充就不行?
    • @artur 是对的,因为您在模型上定义了 $name 属性,所以 Eloquent 跳过了在受保护的 $attributes 数组上定义属性的魔法,这是保存的内容到数据库。
    • @Artur 你应该在你的回答中解释一下。
    • 我明白了,删除公共 $name 允许它工作。最初我将它放在私有 $name 中,因为我需要稍后访问这些变量。比如$this->flightCode = $this->name.'-1DH'; 我有使用getter和setter的习惯,不使用private $name还能实现吗;
    • 是的,如果没有声明的 $name 属性,它仍然可以工作。此外,它是公共的还是私有的都没关系,如果完全定义了 $name 属性,它就会跳过魔法。不要跳过魔术!
    猜你喜欢
    • 2012-12-29
    • 2020-02-06
    • 2015-06-27
    • 2018-04-05
    • 1970-01-01
    • 2019-08-24
    • 2020-11-22
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多