[英]Laravel ignore mutators
我正在使用 Laravel 的 Mutator 功能,并且有以下 Mutator:
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}
但是在某些情况下我需要忽略这个 Mutator。 有什么办法可以做到这一点
在模型中设置一个公共变量,例如 $preventAttrSet
public $preventAttrSet = false;
public function setFirstNameAttribute($value) {
if ($this->preventAttrSet) {
// Ignore Mutator
$this->attributes['first_name'] = $value;
} else {
$this->attributes['first_name'] = strtolower($value);
}
}
现在您可以根据您的情况将公共变量设置为 true 时想要忽略 Mutator
$user = new User;
$user->preventAttrSet = true;
$user->first_name = 'Sally';
echo $user->first_name;
虽然提供的答案似乎有效,但 Laravel 中有一种方法可以访问原始值:
$service->getOriginal('amount')
请参阅此帖子: getOriginal() 示例
Api: API 文档
如果您需要偶尔跳过 Eloquent Model mutators(例如在单元测试中),您应该使用setRawAttributes() :
$model->setRawAttributes([
'first_name' => 'Foobar',
]);
OP 真正想要的是来自数据库的原始值,它不通过给定的 mutator,每个人都建议$model->getOriginal()
但是当您运行此方法时,该值仍然通过 mutator。 所以真正的答案是
$model->getRawOriginal('first_name')
这将为您提供跳过增变器的原始值。 Laravel API:getRawOriginal
如果您只需要偶尔忽略修改器 - 创建另一个不经过默认修改的设置器:
public function ignoreFirstNameMutator($value) {
$this->attributes['first_name'] = $value;
}
$object->ignoreFirstNameMutator('Peter') //saves 'Peter'
我在使用setRawAttributes
时遇到了一些问题,所以我决定使用这种方法
public function setPasswordAttribute($value, $ignore = false)
{
if ($ignore)
$this->attributes['password'] = $value;
else
$this->attributes['password'] = Hash::make($value);
}
当您想忽略 mutator 时,您可以使用$user->setPasswordAttribute('123', true)
这个对我有用 :
$obj->getAttributes()['first_name']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.