Используйте именованные параметры. Они описаны в документации в разделе Выполнение необработанных запросов 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
, вы можете вместо этого использовать другие функции построителя запросов и строить запрос по крупицам с параметром, поступающим из переменной:
$id = 2;
DB::table('users')
->select('id')
->where('id', '>', $id)
->orWhere('id', '<', $id)
->orWhere('id', $id)
->first();
Конструктор запросов довольно мощный, и для более сложной логики вы можете вкладывать замыкания. См. Несколько примеров в соответствующем разделе документации.
person
tremby
schedule
13.03.2016
:=someparameter
или:someparameter
разделить заполнители по имени, но это не сработало. похоже, только?
действителен! - person alex   schedule 13.03.2016whereRaw
? Будет ли действительным ответ, который его переписывает безwhereRaw
? - person tremby   schedule 13.03.2016