Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

Добрый день!
Есть простая задача:
Модуль синхронизации сайта с 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   - то ж самое.... :(

Надіслати
Поділитися на інших сайтах


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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.