保存模型时忽略mutators

时间:2016-07-13 20:54:28

标签: php laravel

我有一个模型将十进制存储为整数,当使用mutator从数据库读取/写入时,这些模型应该被转换:

public function getPrice($value)
{
    return $value / 100;
}

public function setPrice($value)
{
    $this->attributes['price'] = round($value, 2) * 100;
}

但是,从不调用变异器。

例如,如果我create/insert/save等:

PriceHistory::create(['price' => 1234.25]);

我收到此错误:

Illuminate\Database\QueryException with message 'SQLSTATE[22P02]:
    Invalid text representation: 7 ERROR:
        invalid input syntax for integer:
            "1234.25" (SQL: insert into "price_history" ("price") values (1234.25))'

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

来自docs:

  

定义访问者

     

要定义访问者,请在模型上创建获取 Foo 属性方法   其中Foo是您希望访问的列的“驼峰”名称。

所以,就像这样:

public function getPriceAttribute($value)
{
    return $value / 100;
}

public function setPriceAttribute($value)
{
    $this->attributes['price'] = round($value, 2) * 100;
}

答案 1 :(得分:0)

访问者/ mutator的名称必须包含Attribute,就像the docs一样。放手一搏:

public function getPriceAttribute($value)
{
    return $value / 100;
}

public function setPriceAttribute($value)
{
    $this->attributes['price'] = round($value, 2) * 100;
}