Laravel 5.3 $model->save() 值始终为空,但是批量分配有效

Posted

技术标签:

【中文标题】Laravel 5.3 $model->save() 值始终为空,但是批量分配有效【英文标题】:Laravel 5.3 $model->save() values are always null however mass assignment works 【发布时间】: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() 为对象存储了一个空值。我不明白我做错了什么。请帮忙!

【问题讨论】:

【参考方案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 属性,它就会跳过魔法。不要跳过魔术!

以上是关于Laravel 5.3 $model->save() 值始终为空,但是批量分配有效的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 Eloquent 关系 - 用户、角色、页面和权限

Laravel 5.3 用户模型中的 CanResetPassword

从 5.1 迁移到 5.3 时急切加载关系的 Laravel 错误

如何处理带有斜线的 Laravel Eloquent “WHERE”查询? (Laravel 5.3)

Laravel Eager Loading 和动态绑定模型关系

分离 Laravel 5.3