在 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
我想从产品 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