在 Laravel 5 中访问原始 Eloquent 变异属性值

Access raw Eloquent mutated attribute value in Laravel 5

假设我有一个模型 Foo 并且我正在改变一个属性 getter,就像这样:

class Foo extends Model
{   
    protected $table = 'foo';

    public function getSomeBarAttribute($value)
    {
        return some_function($value);
    }
}

有没有办法访问属性的原始值,预突变?

在模型中定义了这个变量:

/**
 * The model attribute's original state.
 *
 * @var array
 */
protected $original = array();

它受到保护,所以你应该添加一个函数来获取原始值

(未测试)

您要找的方法是getOriginal。要获得原始值,您可以使用:

$this->getOriginal('some_bar');

getOriginal() 方法 return 只有 db 属性为 A​​rray 类型。所以getAttributes和setAttributes等值确实没有包括在内。

A​​rray returns [key => value] 足以用于新的 Eloquent 实例。如果你想使用计算旧属性的 GetAttributes,你可以在使用 getAttributes with Original Values

之前创建新的模型实例
$currentSomeBar = $foo->some_bar


$oldFoo = new Foo($foo->getOriginal());

$oldSomeBar = $oldFoo->some_bar;