在Laravel 5中获取Eloquent模型属性的原始值和变异后的值

10

假设我有一个模型 Foo,并且我正在更改属性 getter。代码如下:

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

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

有没有一种方法可以在变异之前访问属性的原始值?

3个回答

20

你要查找的方法是getOriginal。要获取原始值,你可以使用以下代码:

$this->getOriginal('some_bar');

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

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

"这是受保护的,因此您需要添加一个函数来获取原始值。 (未经测试)"

2
是的,我基本上创建了一个名为rawSomeBar的新函数,它返回$this->attributes['some_bar'] - Ahmed Nuaman

0

getOriginal() 方法只返回数据库属性到 Array 类型。因此,getAttributessetAttributes 等值不包括在内。

Array 返回 [key => value],这足以创建新的 Eloquent 实例。如果您想使用计算旧属性的 GetAttributes,则可以在使用原始值的 getAttributes 之前创建新的模型实例。

$currentSomeBar = $foo->some_bar


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

$oldSomeBar = $oldFoo->some_bar;

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