获取Laravel 5.1 Eloquent模型的原始属性

31

我有一个名为 Foo 的属性,它使用 getFooAttribute 方法在显示之前进行格式化,但在某些地方,我需要该属性的原始值。那么我该怎么做?


如果你想获得它的原始值,你将不得不删除你的get mutator。 - Inurosen
2
http://stackoverflow.com/help/how-to-ask - AgeDeO
@Inurosen 我需要在一些地方使用 mutator。 - Mohamed Gamal
9个回答

43
从v4.2开始,获取特定属性的原始值: $originalFoo = $model->getOriginal('foo');

3
getOriginal() 方法旨在用于获取从数据库加载的属性的原始值。仅在该值未更改的情况下才起作用。如果该值被修改,它将无法像操作者所期望的那样工作。快速示例:1)假设 $model 从数据库加载,并且 $model->getOriginal('foo') 的值为 "foo"。2)更改属性值:$model->foo = "bar"; 3)$model->getOriginal('foo') 将返回 "foo" 而不是 "bar"。 - jedrzej.kurylo
@jedrzej.kurylo,这就是为什么你应该使用setter $model->setFoo("bar")。这样可以保留$original数组,并且总体上是一个好的实践方法。 - Jacques

21

如果你想在大部分代码中使用mutator,但有时又想访问原始值,你可以通过使用模型的getAttributes()方法获取所有属性,然后从那里获取值,例如:

$originalFoo = $model->getAttributes()['foo'];

15

7

对于 Laravel 5,我们也可以使用以下方法:

$model->getOriginal('foo')

感谢@bower提供的帮助


7

Laravel 7 和 Symfony 5

$model->getRawOriginal()

getOriginal方法

影响程度: 低

$model->getOriginal()方法现在将遵循模型上定义的转换器(casts)和修改器(mutators)。先前,此方法返回未经转换、未经处理的原始属性。如果您仍希望检索原始未经转换的值,则可以使用getRawOriginal方法。


6

我使用的是 5.3 版本,为此我使用 $model->getOriginal()['foo']


12
值得注意的是,如果您希望获取特定属性的原始值,只需将键传递给 getOriginal 方法即可,例如 $model->getOriginal('foo') - Bower

2

对我有用

$newProduct = $product[0]->getRawOriginal();

1

实际上,以上所有内容都是正确的,只需要查看它是否在数组键[0]中。 例如:

$originalFoo = $model[0]->getRawOriginal('foo');

-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接