【问题标题】:Access raw Eloquent mutated attribute value in Laravel 5在 Laravel 5 中访问原始 Eloquent 变异属性值
【发布时间】:2015-11-15 12:02:09
【问题描述】:

假设我有一个模型 Foo,我正在改变一个属性 getter,如下所示:

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

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

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

【问题讨论】:

    标签: laravel laravel-5 eloquent accessor


    【解决方案1】:

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

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

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

    (未测试)

    【讨论】:

    • 是的,我基本上创建了一个名为rawSomeBar 的新函数,它返回$this->attributes['some_bar']
    【解决方案2】:

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

    $this->getOriginal('some_bar');
    

    【讨论】:

      【解决方案3】:

      getOriginal() 方法只返回 Array 类型的 db 属性。所以getAttributes和setAttributes等值确实不包括在内。

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

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

      【讨论】:

      • 请不要只发布代码作为答案,还要说明您的代码的作用以及它如何解决问题。带有解释的答案通常质量更高,更有可能吸引投票。
      猜你喜欢
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2019-11-26
      • 1970-01-01
      相关资源
      最近更新 更多