Intereting Posts
Почему я получаю «Неопределенный индекс» из моего PHP? проверка формы в php doctrine2 queryBuilder должен возвращать только соответствие результата с значениями массива (ids): 0 / Null и / или один и / или многие id (ы) должны возвращать один результат PDO: Как проверить, действительно ли соединение активно, для реального? mysql_query (): как проверить, обновлены ли какие-либо строки в случае UPDATE SQL Создание хранимых процедур с PDO в PHP отправка почтовых данных с jquery при отправке формы Yii zii.widgets.CDetailView – вывести атрибут как формат HTML-кода PHP-HTML-парсинг :: Как можно взять значение кодировки веб-страницы с помощью простого анализатора html dom? Paypal в CodeIgniter php – добавить + формат от 7 дней до даты mm dd, YYYY Перерыв загрузки HTTP-файла с сервера с помощью PHP или Apache Граничный поиск (solr) vs Хорошая старая фильтрация через PHP? Когда добавлять скобки после нового имени класса? PHP-символы в Юникоде

Привязка параметра построителя запроса Laravel

Я пытаюсь связать одно значение с некоторым параметром в необработанном запросе (Laravel 5.2)

//this is a non practical example ,only for clarify the question DB::table('users as u') ->select('id') ->whereRaw('u.id > ? or u.id < ? or u.id = ?',[2,2,2]) ->first(); 

есть ли способ связать одни и те же параметры сразу (предотвратить дублирование значений в [2,2,2])?

Используйте именованные параметры. Они описаны в документации в разделе « Запуск исходных SQL-запросов» на странице «База данных» в подзаголовке «Использование именованных привязок». Цитирование:

Вместо использования ? для представления привязок параметров, вы можете выполнить запрос с использованием именованных привязок:

 $results = DB::select('select * from users where id = :id', ['id' => 1]); 

В вашем случае вы должны иметь возможность запускать это:

 DB::table('users as u') ->select('id') ->whereRaw('u.id > :id or u.id < :id or u.id = :id', [ 'id' => 2, ]) ->first(); 

Но похоже, что Laravel выбрасывает QueryException с сообщением Invalid parameter number . Я сообщил об этом как об ошибке .

Если вы действительно хотите использовать whereRaw вы можете вместо этого построить свой массив параметров из переменной:

 $id = 2; DB::table('users as u') ->select('id') ->whereRaw('u.id > ? or u.id < ? or u.id = ?', [ $id, $id, $id, ]) ->first(); 

Или используйте array_fill для повторения значения для вас:

 $id = 2; DB::table('users as u') ->select('id') ->whereRaw('u.id > ? or u.id < ? or u.id = ?', array_fill(0, 3, $id)) ->first(); 

Если вам не нужен whereRaw вы можете вместо этого использовать другие функции построителя запросов и whereRaw строить запрос, используя параметр, поступающий из переменной:

 $id = 2; DB::table('users') ->select('id') ->where('id', '>', $id) ->orWhere('id', '<', $id) ->orWhere('id', $id') ->first(); 

Конструктор запросов является достаточно мощным, и для получения более сложной логики вы можете закрывать блокировки. Для некоторых примеров см. Соответствующий раздел документации .