在laravel中选择全部应用sql案例

时间:2018-04-11 13:26:53

标签: mysql laravel laravel-5 eloquent laravel-eloquent

我想获取products表中的所有列并仅在pick_8和pick_12列上应用sql case但是要执行此操作,我必须在select中写入所有列名。在laravel中有什么方法可以应用简单的get()方法来检索所有列,只需要在2上应用case,而不必手动编写所有列名。

$products = Product::where('is_archive',0)->select('humanId','name','cost','retailPrice','memberPrice','points',
             DB::raw('(CASE WHEN pick_8 = 1 THEN "True" ELSE "False" END) AS pick_8'),
             DB::raw('(CASE WHEN pick_12 = 1 THEN "True" ELSE "False" END) AS pick_12'))->get()->toArray();

1 个答案:

答案 0 :(得分:0)

要检索所有列,您还可以使用DB::raw方法。

$products = Product::where('is_archive',0)->select(
            DB::raw('products.*'),
            DB::raw('(CASE WHEN pick_8 = 1 THEN "True" ELSE "False" END) AS pick_8'),
            DB::raw('(CASE WHEN pick_12 = 1 THEN "True" ELSE "False" END) AS pick_12'))->get()->toArray();

CASE语句将覆盖pick_8和pick_12列的原始值。

P.S。顺便说说。我猜你试图使用错误的工具来达到你的目标。看看eloquent-mutators