laravel ORM 的修改器用来自动换算分和元竟然不生效?

2018-04-25 09:42:29 +08:00
 solaro

http://laravelacademy.org/post/7014.html

我系统中存储单位是分,用户界面展示的是元。 应用场景:商品、用户余额

现在: 添加新数据( insert )、获取数据( select )没毛病,能自动的 再 insert 的时候 乘 100,select 出来的时候 除 100

但是问题来了,这个东西竟然不支持 在更新数据的时候( update )自动 乘 100
使用 自增 increment 和 自减 decrement 不会自动 乘 100

坛子里有小伙伴们碰到吗

举例:

/**
 * 商品
 * Class Goods
 *
 * @package App\Http\Models
 */
class Goods extends Model
{
    protected $table = 'goods';
    protected $primaryKey = 'id';

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

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

$amount = 10;
Goods::query()->increment('price', $amount);

希望结果:goods 的 price 加 1000
实际结果:goods 的 price 只加了 10
1707 次点击
所在节点    问与答
6 条回复
ericls
2018-04-25 10:02:36 +08:00
increment 和 setPriceAttribute 都不是一个东西……

搞不好 increment 还是直接走的数据库 做的 atomic
justfindu
2018-04-25 10:07:24 +08:00
不好判断啊, 他只是在更新时候把属性值 * 100, 但是你这个增减的话, 它是把你的变更数值增减 * 100 , 还是把你原来数据 * 100 增减, 还是把你计算完的数据增减 * 100 , 完全不好判断.
vex2
2018-04-25 10:45:22 +08:00
vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php
GooMS
2018-04-25 12:55:00 +08:00
看看代码如何实现就几道了
2ME
2018-04-25 14:06:56 +08:00
increment 走的是 QueryBuilder 并不是 ORM 操作 所以并不会经过 ORM 的修改器
solaro
2018-04-26 11:02:05 +08:00
@2ME 感谢,花点时间看了框架,看了下明白了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/449627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX