我想获取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();
答案 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