Разные значения между массивами - PullRequest
0 голосов
/ 07 октября 2019

У меня есть два этих массива в результате запросов:

$f = DocsPf::where('renda', '=', 2)->where('tipo', '=', 'R')->pluck('id');
$f = [4,5,6,7,8,9,10]

И

$d = Documento::where('user_id', '=', $id)->pluck('cad_doc_id');
[4,5,6,7,8]

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

$missing = Docs::where('id', '=', 9)->first();

и

$missing = Docs::where('id', '=', 10)->first();

Я сделал

$ids = array_diff($f, $d);
        return $ids;

... как писал брат, но получил ошибку попаданий:

array_diff(): Expected parameter 1 to be an array, object given

Любая помощь, пожалуйста?

1 Ответ

2 голосов
/ 07 октября 2019

Вы можете использовать array_diff() для двух массивов, чтобы получить уникальные значения:

$array1 = [4,5,6,7,8,9,10];
$array2 = [4,5,6,7,8];

$uniqueIds = array_diff($array1, $array2); // `[9, 10]`

$missing = Docs::whereIn("id", $uniqueIds)->get();
// Will return a `Collection` of `Doc` models based on the passed `ids`

- Правка -

Если $array1 и $array2 - это Collection s, вы можете использовать функцию diff():

$array1 = collect([4,5,6,7,8,9,10]);
$array2 = collect([4,5,6,7,8]);

$uniqueIds = $array1->diff($array2);
$missing = Docs::whereIn("id", $uniqueIds)->get();
// Note: You may need to do `$uniqueIds->toArray()` if it complains further.

Еще одна альтернатива, вы можете преобразовать $array1 и $array2 в массивы перед использованием array_diff()

$uniqueIds = array_diff($array1->toArray(), $array2->toArray());

Это немного избыточно, но должно помочь продемонстрировать разницу между массивом и Collection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...