Попытка включить переменные в необработанный запрос 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');