V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
solaro
V2EX  ›  问与答

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

  •  
  •   solaro · 2018-04-25 09:42:29 +08:00 · 1640 次点击
    这是一个创建于 2187 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
    
    6 条回复    2018-04-26 11:02:05 +08:00
    ericls
        1
    ericls  
       2018-04-25 10:02:36 +08:00 via iPhone
    increment 和 setPriceAttribute 都不是一个东西……

    搞不好 increment 还是直接走的数据库 做的 atomic
    justfindu
        2
    justfindu  
       2018-04-25 10:07:24 +08:00
    不好判断啊, 他只是在更新时候把属性值 * 100, 但是你这个增减的话, 它是把你的变更数值增减 * 100 , 还是把你原来数据 * 100 增减, 还是把你计算完的数据增减 * 100 , 完全不好判断.
    vex2
        3
    vex2  
       2018-04-25 10:45:22 +08:00
    vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php
    GooMS
        4
    GooMS  
       2018-04-25 12:55:00 +08:00 via Android
    看看代码如何实现就几道了
    2ME
        5
    2ME  
       2018-04-25 14:06:56 +08:00   ❤️ 1
    increment 走的是 QueryBuilder 并不是 ORM 操作 所以并不会经过 ORM 的修改器
    solaro
        6
    solaro  
    OP
       2018-04-26 11:02:05 +08:00
    @2ME 感谢,花点时间看了框架,看了下明白了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2665 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:37 · PVG 23:37 · LAX 08:37 · JFK 11:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.