Получить массив элементов из MySQL - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь получить массив товаров из базы данных MySQL, чтобы показать определенные c товары в зависимости от идентификатора производителя в корзине (prestashop). Я сделал этот запрос

 $cart_items = $cartObj->getProducts();
            if (is_array($cart_items) && count($cart_items) > 0) {
                $cart_ids = array();
                foreach ($cart_items as $cart_item) {
                    $cart_ids[] = $cart_item['id_product'];
                }

                $arrayKeys = array_keys($cart_ids);
                $cart_ids[$arrayKeys[0]];


                $id_manufacturers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
                                SELECT id_manufacturer
                                FROM `'._DB_PREFIX_.'product`
                                WHERE id_product IN (' . implode(',', array_map('intval', $cart_ids)) . ')
                            ');

                $items = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
                select id_product
                from `'._DB_PREFIX_.'product` p
                where p.id_manufacturer IN (' . implode(',', array_map('intval', $id_manufacturers)) . ')
                '.(count($excluded_ids) ? ' AND p.id_product NOT IN (' . implode(', ', $excluded_ids) . ')' : '').'
                group by p.id_product
                limit '.(int)$limit.'
                ');

            }

И ничего не появляется. Я знаю, что когда я использую Db :: getInstance-> getValue в $ id_category_default при попытке получить продукты только от 1 производителя, все работает нормально. И когда я добавляю тестовый массив для $ items, таких как (1, 2, 3, 4, 5), продукты также отображаются с этим идентификатором производителя. Но когда я пытаюсь получить массив id_manufacturer и показать продукты, основанные на этом массиве, ничего не появляется. Есть ли другой способ создать массив для id_manufacturers?

Структура базы данных выглядит примерно так

+------+-------+--------------------------------------------+
| id_product   | id_manufacturer   | content         |
+------+-------+--------------------------------------------+
| 1            | 1                 | ...             |
| 2            | 1                 | ...             |
| 3            | 2                 | ...             |
| 4            | 3                 | ...             |
+------+-------+--------------------------------------------+

И мне нужен массив идентификаторов id_manufacturer, например (1, 2, 3)

1 Ответ

0 голосов
/ 05 августа 2020

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

$manufacturers = [];
foreach ($cart->getProducts() as $product) {
    $manufacturers[] = $product['id_manufacturer'];
}

$items = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
    SELECT p.`id_product`
    FROM `'._DB_PREFIX_.'product` p
    WHERE p.`id_manufacturer` IN (' . implode(',', $manufacturers) . ')
    '.(count($excluded_ids) ? ' AND p.`id_product` NOT IN (' . implode(', ', $excluded_ids) . ')' : '').'
    GROUP BY p.`id_product`
    LIMIT '.(int) $limit
);

Убедитесь, что вы используете правильные псевдонимы, и иногда стоит проверить `` внутри вашего запроса. Дайте мне знать, если это сработает для вас.

...