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)