Как получить (не найдено) результаты при поиске с помощью (whereIn) - PullRequest
0 голосов
/ 12 февраля 2019

Я получил эту таблицу в своей схеме БД Laravel Project:

id | user_id | reference | created_at
---------------------------------------
1  |   2     | ref - 1   | dd/mm/yy
2  |   2     | ref - 2   | dd/mm/yy
3  |   2     | ref - 3   | dd/mm/yy
4  |   2     | ref - 4   | dd/mm/yy

Теперь я хочу создать запрос для передачи массива ссылок, затем я получаю результаты в ответ для каждого элемента вмассив, который я передал, такой как это:

id  | user_id | reference | created_at
--------------------------------------
3   |   2     | ref - 3   | dd/mm/yy
4   |   2     | ref - 4   | dd/mm/yy
null|  null   | ref - 5   | null

Где ref - 5 не найден

Обновление: сейчас это код, который у меня есть:

$references = ['ref - 3','ref - 4','ref - 5'];
$result = Reference::whereIn('reference',$references)->get();

результат игнорируется ref - 5 , поскольку он не найден.вот что я получаю:

id  | user_id | reference | created_at
--------------------------------------
3   |   2     | ref - 3   | dd/mm/yy
4   |   2     | ref - 4   | dd/mm/yy

Я хочу сохранить строку для не найденных ссылок, поэтому результаты выглядят следующим образом:

id  | user_id | reference | created_at
--------------------------------------
3   |   2     | ref - 3   | dd/mm/yy
4   |   2     | ref - 4   | dd/mm/yy
null|  null   | ref - 5   | null

с меньшим количеством шагов,Есть ли способ получить такой результат, просто создав запрос?

1 Ответ

0 голосов
/ 12 февраля 2019

Я предлагаю вам достичь этого с помощью PHP.Это будет читабельным, а также.

<?php

$references = ['ref - 3','ref - 4','ref - 5'];
$result = Reference::whereIn('reference',$references)->get()->toArray();
$obtained_refs = [];

foreach($result as $each_record){
    $obtained_refs[$each_record['reference']] = true;
}

foreach($references as $each_ref){
    if(!isset($obtained_refs[$each_ref])){
        // if reference is not present, add it to result array
        $result[] = [
            'id' => NULL,
            'user_id' => NULL,
            'reference' => $each_ref,
            'created_at' => NULL
        ];
    }
}

Алгоритм:

  • Сначала получите набор результатов из БД и сохраните его в $result (как вы уже сделали).
  • Теперь создайте новый массив, скажем, $obtained_refs, который будет отслеживать все ссылки, которые вы получили в результирующем наборе, делая каждый реф как ключ.Это сделано для ускорения поиска.
  • Теперь, переберите массив $references и проверьте, присутствует ли какой-либо ref , а не в нашем $obtained_refs.Если да, добавьте его в массив $result, иначе не предпринимайте никаких действий.
  • Таким образом, массив $result будет содержать желаемый результат в конце.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...