Попытка включить переменные в необработанный запрос Laraval

Я запутался, пытаясь поместить выражение в запрос:: 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() работать.

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'); 
Другие вопросы по тегам