【问题标题】:Accessors and Mutators for where clause laravelwhere 子句 laravel 的访问器和修改器
【发布时间】:2014-09-03 21:54:27
【问题描述】:

我正在使用 Laravel 制作一个 Web 应用程序,但我必须使用糟糕的 CMS。

CMS 在数据库中生成一些条目,例如“info10”、“info20”等...

想象一下这张桌子“煎饼”:

id | info1 | info25

Info1 代表煎饼的价格Info25 代表数量

有了访问器和修改器,我可以使用$pancake->price$pancake->quantity 来设置和获取数据,但是我可以如何执行如下查询:

Pancake::where('price', 25)->count()Pancake::where('info1', 25)->count()

【问题讨论】:

    标签: php laravel-4 model eloquent accessor


    【解决方案1】:

    可以用这个包实现 https://github.com/jarektkaczyk/eloquence/wiki/Mappable


    您可以以相同的方式使用范围:

    public function scopePriceWhere($query, $price, $operator = '=', $bool = 'and')
    {
        $query->where('info1', $operator, $price, $bool);
    }
    
    // then
    Pancake::priceWhere(25); // where('info1', 25);
    Pancake::priceWhere(25, '>'); // where('info1', '>', 25);
    Pancake::priceWhere(25, '=', 'or'); // orWhere('info1', 25);
    

    不要使用方法scopeWherePrice,因为wherePrice 是动态调用,会导致WHERE price = ...

    【讨论】:

    • 是的,我想过这个,但这不是最好的解决方案,也许可以挂钩在 where 子句、orderby 等中传递的字符串参数......以使用正确的条目进行转换。
    • 没有通用方法,您必须创建自己的实现。在我的脑海中,我建议使用get 方法并翻译wheresorders,也许是columns Query\Builder 的属性。
    • 为了后代 - 我前段时间创建了一个包,允许执行 OP 需要的操作 - 在上面的答案中链接。
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多