我有一个名为 Foo
的属性,它使用 getFooAttribute
方法在显示之前进行格式化,但在某些地方,我需要该属性的原始值。那么我该怎么做?
$originalFoo = $model->getOriginal('foo');
$model->setFoo("bar")
。这样可以保留$original
数组,并且总体上是一个好的实践方法。 - Jacques如果你想在大部分代码中使用mutator,但有时又想访问原始值,你可以通过使用模型的getAttributes()方法获取所有属性,然后从那里获取值,例如:
$originalFoo = $model->getAttributes()['foo'];
如果你想要跳过修改器直接获取数据库中的原始字段,则
$mode->getRawOriginal('attribute')
这是正确的方法:$model->getOriginal()
将为您提供变异器的值,而不是您想要的原始数据。
对于 Laravel 5,我们也可以使用以下方法:
$model->getOriginal('foo')
感谢@bower提供的帮助
$model->getRawOriginal()
影响程度: 低
$model->getOriginal()
方法现在将遵循模型上定义的转换器(casts)和修改器(mutators)。先前,此方法返回未经转换、未经处理的原始属性。如果您仍希望检索原始未经转换的值,则可以使用getRawOriginal
方法。
我使用的是 5.3 版本,为此我使用 $model->getOriginal()['foo']
getOriginal
方法即可,例如 $model->getOriginal('foo')
。 - Bower对我有用
$newProduct = $product[0]->getRawOriginal();
实际上,以上所有内容都是正确的,只需要查看它是否在数组键[0]中。 例如:
$originalFoo = $model[0]->getRawOriginal('foo');
还值得一提的是,Laravel模型类覆盖了魔术方法__set
和__get
,因此您也可以动态地检索original
属性,即$model->original
。
请参见https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Model.php