0

让自己纠结于尝试将语句放入 ::raw 查询中:

  $rawStatement = "DISTINCT Product";
  $product_codes = DB::table('Chemical')
          ->JOIN('ChemicalTarget', 'Chemical.ChemicalID', '=' , 'ChemicalTarget.ChemicalID')
          ->select(DB::raw(function($query) with ($rawStatement) {
                   $query->select(DB::raw($rawStatement));
                   })
          ->orderBy('Product', 'asc')
          ->groupBy('Product')
          ->lists('Product'); //<-- This is required for existing front end.

最终,我将尝试将其放入该声明中:

 CONCAT(Product, ' ', CASE WHEN :stateReg != 'Y' THEN '(not :state reg)' ELSE '' END) as label
 

 array('stateReg' => $stateRegistered, 'state' => $state)

 ->orderBy('label', 'asc')
          ->groupBy('label')
          ->lists('label'); 

如果我更换

 ->select(DB::raw(function($query) with ($rawStatement) {
                   $query->select(DB::raw($rawStatement));
                   })

 ->select(DB::raw("DISTINCT Product")

当然有效..

我使用这个链接作为参考来构建我的初始过程,当我添加第二个变量时遇到了障碍,但即使我将它减少到一个,我也无法让 ->lists() 工作。

4

1 回答 1

1

参考:https ://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

Collection、查询构建器和 Eloquent 查询构建器对象的列表方法已重命名为 pluck。方法签名保持不变。

既然这么说您将替换lists采摘功能(Retrieving A List Of Column Values在此页面中搜索)

如何在闭包函数中传递多个变量:您可以使用use关键字和选项列表,如下所示。

->select(DB::raw(function($query) use ($a, $b, $c) {
    // use $a, $b, $c
 })

但在这种情况下,您可以通过直接将原始文本放入DB::raw(). 所以你的查询可以像这样使用$stateRegistered$state变量。

$products = DB::table('Chemical')
          ->join('ChemicalTarget', 'Chemical.ChemicalID', '=', 'ChemicalTarget.ChemicalID')
          ->select(DB::raw("CONCAT(Product, ' ', CASE WHEN '$stateRegistered' != 'Y' THEN '(not $state)' ELSE '' END) as label"))
          ->orderBy('label', 'asc')
          ->groupBy('label')
          ->pluck('label'); 
于 2020-09-18T06:59:11.183 回答