Невозможно использовать параметры для условия IN в Laravel в DB :: select - PullRequest
0 голосов
/ 29 января 2019

По какой-то странной причине параметры не работают для условия In в моем запросе.

Если я жестко задаю свои параметры, запрос возвращает результат:

DB::select("SELECT * FROM my_table WHERE vendor_id IN (19009, 19010)

Эти дон 'вернуть результат:

DB::select("SELECT * FROM my_table WHERE vendor_id IN (':vendor_ids')", [
  ':vendor_ids' => implode([
    19010,
    19009,
  ]),
]);

DB::select("SELECT * FROM my_table WHERE vendor_id IN (':vendor_ids')", [
  ':vendor_ids' => [
    19010,
    19009,
  ],
]);

DB::select("SELECT * FROM my_table WHERE vendor_id IN (':vendor_ids')", [
  ':vendor_ids' => '19009, 19010',
]);

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Использование IN(:paramters) вернет только одну строку.

Вам необходимо привязать параметры отдельно, например IN(:parameter1, parameter2).Таким образом, вы должны получить ожидаемый результат, если выполните следующие действия:

DB::select("SELECT * FROM my_table WHERE vendor_id IN (':vendor_id1, :vendor_id2',...)", 
    [':vendor_id1' => 1, ':vendor_id2' => 2]);

Подробнее

Для динамической генерации параметров, если у вас есть массив идентификаторов поставщиков, итеративный по ними создайте еще один ассоциативный массив

$vendors = [];
foreach ($vendorId as $id) {
    $vendors[':vendor' . $id] = $id;
}

Тогда

DB::select("SELECT * FROM my_table WHERE vendor_id IN (" . implode(array_keys($vendors), ',') . ")", 
    $vendors);
0 голосов
/ 29 января 2019

Laravel имеет очень хороший конструктор запросов

Попробуйте это:

$resultCollection = DB::table('my_table')
    ->select('*')
    ->whereIn('vendor_id', [19009, 19010])
    ->get();

Если вы действительно хотите использовать необработанный запрос, попробуйте DB::raw

Вот так:

$resultCollection = DB::table('my_table')
    ->whereRaw('vendor_id IN (?)', [19010,19009])
    ->get();
...