在laravel中对select all应用sql case

agyaoht7  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(283)

我想从products表中获取所有列,并仅对pick_8和pick_12列应用sql case,但要做到这一点,我必须在select中写入所有列名。在laravel中,有没有什么方法可以应用simple 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();
pu82cl6c

pu82cl6c1#

检索所有可以使用的列 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、 顺便说一句。我猜你想用错误的工具来达到你的目标。看看雄辩的变异

相关问题