как сравнить две коллекции и получить записи матчей - PullRequest
0 голосов
/ 03 апреля 2020

Я использую Laravel, и у меня есть две разные коллекции, которые содержат ID продуктов

Первая - colorProduct, а вторая - tagProduct

, поэтому я хочу сравнить эти два и получить только тот же ID продуктов, так как я могу это сделать?

$colorProducts = Color::where('code', $request->color)->get()->first()->products;

$tagProducts = $tag->products->where('shop_id', $shop->id);

$colorAndTagProducts = collect();

foreach ($colorProducts->toBase()->merge($tagProducts)->unique('id')->groupBy('id') as $allProducts) {
    if ($allProducts->count() >= 1) {
        $colorAndTagProducts[] = $allProducts->first();
    }
}

здесь

$ colorAndTagProducts

дает мне все записи формы обе коллекции, но я хочу только одну запись

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020
intersect()

Метод пересечения удаляет все значения из исходной коллекции, которых нет в данном массиве или коллекции. Полученная коллекция сохранит ключи исходной коллекции:

Я сделал это с помощью этого метода

0 голосов
/ 03 апреля 2020

Не знаю, правильно ли я понимаю, но может так? Я полагаю, что цвет и продукт во многих отношениях. И продукт и магазин / тег в один ко многим.

$colorId = Color::where('code', $request->color)->get()->first()->id;
$shopId = $shop->id;

$products = Product::whereHas('colors', function ($query) use ($colorId) {
                $query->where('id', $colorId); //id or color_id
            })->where('shop_id', $shopId)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...