Laravel - неопределенный индекс в построителе запросов - PullRequest
1 голос
/ 17 марта 2020

У меня есть следующий массив, в который я хочу передать все значения для ключа "main_id" в whereNotIn условие:

array:7 [
  0 => array:1 [
    "main_id" => "KWS1354767"
  ]
  1 => array:1 [
    "main_id" => "KWS1348470"
  ]
  2 => array:1 [
    "main_id" => "KWS1300790"
  ]
  3 => array:1 [
    "main_id" => "KWS1267286"
  ]
  4 => array:1 [
    "main_id" => "KWS1260614"
  ]
  5 => array:1 [
    "main_id" => "KWS1259115"
  ]
  6 => array:1 [
    "main_id" => "KWS1145684"
  ]
]

Мой код в контроллере следующий:

$search = $search->select("properties.prop_id as main_id")->get();
$searcharray = $search->toArray();
$prop_cnt = DB::table("offerdemandsmatchs")->whereNotIn('prop_id', $searcharray['main_id'])
            ->where('offerdemand_id', $o->id)
            ->get();

Я получаю ошибку:

ErrorException  : Undefined index: main_id

Если я вручную передам массив, он будет работать:

$prop_cnt = DB::table("offerdemandsmatchs")->whereNotIn('prop_id', ['KWS1354767', 'KWS1348470', 'KWS1300790'])
           ->where('offerdemand_id', $o->id)
           ->get();

Я не могу получить значения из массива, и если я передать значения, как в первом утверждении, это не удается. Как я могу передать значения массива, как я делаю это вручную? Должен ли я передать коллекцию?

С уважением

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Используйте pluck вместо select, а затем преобразуйте в массив.

Метод Pluck создаст для вас массив. проверить метод срывать

$prop_ids = $search->pluck('prop_id');
//$prop_ids = ['KWS1354767','KWS1348470'..];
$prop_cnt = DB::table("offerdemandsmatchs")->whereNotIn('prop_id', $prop_ids)
            ->where('offerdemand_id', $o->id)
            ->get();
1 голос
/ 17 марта 2020

Это не работает, потому что вы передаете неправильный массив в оператор.

Вам нужно использовать array_column в поисковом массиве:

DB::table("offerdemandsmatchs")
    ->whereNotIn('prop_id', array_column($searcharray, 'main_id'))
    ->where('offerdemand_id', $o->id)
    ->get();
...