Перейти к содержанию
9852739646

в таблице product_to_category ячейка main_category не выставляется путью.

Рекомендуемые сообщения

Добрый день!
Есть простая задача:
Модуль синхронизации сайта с 1С должен Товарам приписывать дополнительную категорию исходя из их параметров.
Допустим для примера это будет РАСПРОДАЖА ( id_category = 500).

При этом у самих товаров основная категорий уже ЕСТЕСТВЕННО ЕСТЬ.

Для реализации этого нехитрого замысла, используем некую проверку по алгоритму-требований и по положительньму результату выполняем:
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '500', main_category = 0");

И тут вроде все должно быть норму ль - но тут меня поджидает некая загадка - решение которой в Google и собственных извилинах как то пока не находится.

Т,К,: все ок только в том случае если category_id ГЛАВНОЙ категории меньше category_id = 500  ТОГДА main_category выставляется в ноль 0 иначе наша дополнительная группа выставляется в 1 (то есть стает главной).
Одним словом что при таком запросе main_category  выставляется само сабой исходя из больше меньше category_id  по данному product_id
При этом проделывая теже действия в админке - ОК!
Через phpmyadmin тот же запрос = все ОК!

На примере есть товар с Главной категорией category_id = '700' и product_id = 100
выполняем из скрипта:

$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '100', category_id = '500', main_category = 0");

получаем в базе данных:
product_id      category_id   main_category
100                 500               1
100                 700               0

выполним 
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '100', category_id = '1500', main_category = 0");
и 
$this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '100', category_id = '100', main_category = 0");

получим в базе:
product_id      category_id   main_category
100                 100               1
100                 500               0
100                 700               0

100                 1500             0
как... так??
- понимаю если б новые категории не вставали или б глючили - но как main_category сам по себе изменяется у уже имеющихся в базе записях - Я ЧТО ТО наверно еще незнаю в Mysqli

ВОТ и ЗАГВОЗДКА - ни как решить не могу!!!!

P.S:
Версия ocStore 2.1.0.2.1
define('DB_DRIVER', 'mysqli');


пробывал и так писать main_category = 0 и так main_category = '0'
и удалял все записи о категориях данного товара по id, перед INSERT INTO   - то ж самое.... :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте индексы таблицы отключить. Может product_id+category_id - unique мешает?

Может main_category default=1?

А если простой php-скрипт написать, который без $this->db->query( работает, а на чистом php

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 часов назад, toporchillo сказал:

Попробуйте индексы таблицы отключить. Может product_id+category_id - unique мешает?

Может main_category default=1?

А если простой php-скрипт написать, который без $this->db->query( работает, а на чистом php


параметры таблицы в скрине.
 main_category  default = 0
что конкретно имеется виду под "Первичный"

чуть попозже чисто на php прописать - по результату отпишусь!

rrrrrrrrrrrtrew231.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вообще поколдавал с индексами и т.д. чот видимо Хорвардом тут не пахнет....
до простого скрипта не дошол.....

РЕШИЛ иначе:
выловил main_category_id у товара, и нарисовав такие прелести

$data['main_category_id_32'] = $main_category_id;
$data['product_category_32'] = array($main_category_id, 313);
 

подсунул их в функцию обновление товара
$this->updateProduct($data, $product_id, $language_id);

private function updateProduct($product, $product_id = false, $language_id) {

        ....................

        // Обновляем описание продукта
        $product_old = $this->getProductWithAllData($product_id);

        if(isset($product['product_category_32'])) {
            $product_old['product_category'] = $product['product_category_32'];
        }

        if(isset($product['main_category_id_32'])) {
            $product_old['main_category_id'] = $product['main_category_id_32'];
        }
		....................

ПОСЛЕ ЭТОГО вроде как заработало
Хотя в обновлении товара ничего сверхъестественного тож нету .....

$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");

        if (isset($data['product_category'])) {
            foreach ($data['product_category'] as $category_id) {
                $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$category_id . "'");
            }
        }

        if(isset($data['main_category_id']) && $data['main_category_id'] > 0) {
            $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' AND category_id = '" . (int)$data['main_category_id'] . "'");
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . (int)$data['main_category_id'] . "', main_category = 1");
        } elseif(isset($data['product_category'][0])) {
            $this->db->query("UPDATE " . DB_PREFIX . "product_to_category SET main_category = 1 WHERE product_id = '" . (int)$product_id . "' AND category_id = '" . (int)$data['product_category'][0] . "'");
        }

возможно после вставки данных прямо из модуля - дальнейшее "нормальное" обновление товара модулем и создавало эту кашу - но так то данном случае не затрагиваются категории на обновлении - только цены, акции, наличие.  ЧТо и станно!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вы молодец

 

Я прочитав слово простая задача и увидев что она не помещается на 1 экран fullhd сразу закрыл тему

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.