在 laravel 中对 select 应用 sql 个案例

apply sql case on select all in laravel

我想从产品 table 中获取所有列,并仅在 pick_8 和 pick_12 列上应用 sql 案例,但为此我必须写select 中的所有列名。在 laravel 中有什么方法可以应用简单的 get() 方法来检索所有应用案例仅在 2 上的列,而无需手动编写所有列名。

$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();

要检索所有列,您也可以使用 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