我有一个Laravel Eloquent模型User,它有一个包含用户名和电子邮件列的表。我需要在运行时为模型添加属性,例如$user->secure。此属性不需要进入数据库。
当我添加此属性并执行 $user->save() 时,会出现错误,提示我没有名为“secure”的数据库列。我可以在保存之前取消设置“secure”,但是感觉应该有更好的方法。有什么建议吗?
只需向您的类添加属性即可。
class User extends Eloquent {
public $secure;
// ...
}
请注意,最好将其声明为protected,并向您的模型添加相应的访问器和修改器(getSecure
和setSecure
方法)。
protected
而不是private
? - Alexander Malakhovprotected
,因为它允许扩展类访问属性。只有当他们确定永远不希望子类访问时,才会使用private
。如果通常避免继承,那么这种方式尤其方便。就个人而言,我倾向于使用最小的范围,并在发现实际需要时将其打开到protected
。虽然这主要是习惯问题,而不是强烈的意见。当我想建立明确的契约时,我会花时间选择更合适的可见性。这也包括使用final
关键字。 - musicin3d对于那些仍然找到这篇文章的人(如同我一样),您可能需要明确将属性声明为null
,以防止它被自动添加到attributes
数组中,并因此被添加到INSERT / UPDATE查询中:
class User extends Eloquent {
public $secure = null;
// ...
}
$append
会让您大吃一惊。
http://laraveldaily.com/why-use-appends-with-accessors-in-eloquent/
$user->secure
和$user->save()
。 - Valerio Bozz