1 Отредактировано Алекс (31.08.2015 11:40:03)

Тема: Связи в БД

Можно узнать, какие таблицы связаны между собой при добавлении товара? Допустим, я хочу добавить (или наоборот, удалить) товар напрямую запросом в БД, какие таблицы используются? Например, я хочу добавить: название, описание, категорию, цену в инвалюте, артикул, несколько фото, и пару характеристик. Просто смотрю еще много чего дописывается, даже если значения не заданы, из-за чего могут сбиться связи и человек будет покупать красное пальто, а в заказе окажется деревянная дверь.


Прочитал свой вопрос и понял что не понял сам ))) Спрошу проще - какой запрос к БД выполняется, когда я добавляю новый товар. Почему то не получается перехватить с помощью mytop

Повысить оценку Понизить оценку

Re: Связи в БД

Во первых.
Мы не приемлим прямых обращений в базу. У нас в системе на прямую обращаться нет надобности. Т.к. для этого уже всё предусмотрено. ЗАБУДЬТЕ о прямых обращениях в БД, это метод "лохматых" годов и"олдскул".
Со всем записями в БД можно работать через ORM объект. Каждому ORM объекту соответствует своя БД и своя одна запись в этой БД.
При удалении через ORM объект срабатывает метод delete() в котором, подтягиваются все необходимые данные и удаляются. Поэтому Вам надо сделать примерно так:

$product = new \Catalog\Model\Orm\Product(id записи в БД); //Получаем одну запись товара из БД и помещаем в ORM объект значения
$product->delete(); //Удалит товар и всё что с ним связано само 

Поэтому Вам вообще не надо думать о том какие таблицы задействованы.
Как делать выборки? Вот пара материалов из форума:
http://forum.readyscript.ru/topic/16/zaprosy-k-bd/
http://forum.readyscript.ru/topic/297/g … apis-v-bd/
http://forum.readyscript.ru/topic/321/f … -usloviem/
Ну и собственно документация:
Подсистема ORM и запросы

Если у Вас возникнут вопросы или надо подсказать запрос, то пишите мы Вам всё подскажем с примерами.

3

Re: Связи в БД

А это применимо к работе стороннего скрипта? Потоому что меня интересует именно INSERT а не  SELECT или DELETE

Повысить оценку Понизить оценку

4 Отредактировано Александр (09.09.2015 16:49:32)

Re: Связи в БД

Данная схема действует везде. Ограничений на действие никаких нет.
Insert проще простого сделать, например так:

$product = new \Catalog\Model\Orm\Product(); //Объявим новый ORM объект.

//Заполняем нужные поля объекта \Catalog\Model\Orm\Product, поля смотрим в файле /modules/catalog/model/orm/product.inc.php соответственно, например так

$product['title']    = 'Мой новый товар';
$product['alias']   = \RS\Helper\Transliteration::str2url($product['title']);
$product['xdir']    = array(id нужной нам категории); //Категория
$product['public'] = 1; //Флаг публичности

//И ещё какие-либо наши поля смотрим в файле /modules/catalog/model/orm/product.inc.php

if ($product->insert()){ //Добавим в БД и заодно проверим, а вставилась ли она
   echo "Всё успешно вставилось".
   //После добавления записи у товара появится поле id и достать можно так $product['id']
}else{
   echo "Произошли следующие ошибки".
   var_dump($product->getErrors());
   exit();
}

Далее я расскажу как добавить остальные записи в БД для других вещей. Вообще их можно включить в конструкцию перед insert и оно будет действовать одинаково, но в данном случае я буду рассматривать, если запись уже существует. Т.е. через update.

Добавление цены

//Установка одной цены и валюты 
$excost = array(
   'id нужной нам цены из справочника цен' => array(
     'cost_original_val' => Сколько нам надо,
     'cost_original_currency' => id нужной нам валюты
   )
)
$product['excost'] = $excost;

//Получить id цены по умолчанию(основной) можно так
$default_cost_id = \Catalog\Model\CostApi::getDefaultCostId();

Добавление фото производим через API работы с фото

$photoApi = new \Photo\Model\PhotoApi(); //Инициализируем API
$photoApi->addFromUrl('полный url откуда брать фото','catalog', $product['id']); //Добавляем фото из url

Добавление характеристик

//Для добавления строковой или числовой характеристики
$product['prop'][id нужной нам характеристики]['value'] = 'значение характеристики';
//Для добавления списковой характеристики
$product['prop'][id нужной нам характеристики]['value'] = array(
  'значение характеристики 1',
  'значение характеристики 2',
);

А в конце вызываем update

$product->update(); //Обновим товар

Re: Связи в БД

Ну как успехи?

6

Re: Связи в БД

у парнтерок нет возможности работы админов, у мультимагазина нет единой БД товаров

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

Повысить оценку Понизить оценку

7 Отредактировано Александр (09.09.2015 15:01:14)

Re: Связи в БД

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

Так всё плохо?
Может мы можем чем-то помочь?

8

Re: Связи в БД

Александр пишет:

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

Так всё плохо?
Может мы можем чем-то помочь?

Дык, я бы с удовольствием, только на форуме посоветовали написать тикет, который я написал и его просто послали нах. Да, мне нужен магазин, где будет одна витрина на всех, (1 БД=>много магазов) но у каждого региона (поддомены или еще как) будут свои продавцы. То есть,я загружаю товары в одно место, а 20 человек их продают по стране. При этом все продажи, оплата, обработка товаров идет через них. А я это все со стороны мониторю. + вся оплата, доставка, общение с клиентом идет через админов-регионалов. И мне не надо, что бы один товар превращался в 20 из-за того, что 20 магазов по стране. И каждый регионал сам монитор свои покупки, и видит только из своего региона покупки и обрабатывать может только их. Это вкратце ))

Повысить оценку Понизить оценку

9

Re: Связи в БД

ну а если уж совсем интересно, вот ветка, http://forum.cs-cart.com/topic/41810-ха … ьтр/page-3 думал хоть они смогут, уж совсем контора серьезная. Ан нет, пойди пойми, что хотят.  Будут предложения? Не окажусь

Повысить оценку Понизить оценку

Re: Связи в БД

Дык, я бы с удовольствием, только на форуме посоветовали написать тикет, который я написал и его просто послали нах. Да, мне нужен магазин, где будет одна витрина на всех, (1 БД=>много магазов) но у каждого региона (поддомены или еще как) будут свои продавцы. То есть,я загружаю товары в одно место, а 20 человек их продают по стране. При этом все продажи, оплата, обработка товаров идет через них. А я это все со стороны мониторю. + вся оплата, доставка, общение с клиентом идет через админов-регионалов. И мне не надо, что бы один товар превращался в 20 из-за того, что 20 магазов по стране. И каждый регионал сам монитор свои покупки, и видит только из своего региона покупки и обрабатывать может только их. Это вкратце ))

Я поднял Ваш тикет в системе. Вам предложили разработать модуль под Ваши задачи, но он дорогостоящий и Вы ничего не ответили.
Ну что могу сказать, пока на данный момент решения простого не существует. Нужно разрабатывать данную задачу под Ваши конкретные потребности. Но я понимаю всю задачу, там "геммороя" очень много ведь это не просто отслеживание, но и множественные связи  разнообразные подводные камни при реализации, поэтому Вам и поставили такой ценник. Крупные магазины которые работают по стране разработатывают под себя такие решения, минимально стоимость такого решения у них это 200-300 тысяч рублей.

Бесплатного решения я думаю Вы тоже скорее всего не найдёте.

ну а если уж совсем интересно, вот ветка, http://forum.cs-cart.com/topic/41810-ха … ьтр/page-3 думал хоть они смогут, уж совсем контора серьезная. Ан нет, пойди пойми, что хотят.  Будут предложения? Не окажусь

Вам предложили, тоже что и мы доработать функционал платно под Ваши задачи.

Возможно в будующем такой функционал у нас появится, но скорее всего отдельным модулем со своим ценником.

11 Отредактировано Алекс (12.09.2015 01:45:16)

Re: Связи в БД

К сожалению, не было никакого ответа от ТП, я же мониторю. Я уже понял, что нет решения. 200-300 тысяч это смешео, там явно лишний нолик затесался. Ладно, я понял, сам что-нибудь придумаю, спасибо вам за помощь.
ЗЫ: Кстати, я бы не стал отказываться от платной помощи, но мне реально никаких предложений не приходило. Тикет просто пропал и все. Может, сбой какой был, не знаю, но мне ничего неприходило

Повысить оценку Понизить оценку

12

Re: Связи в БД

Полная история всего общения со службой поддержки (как по тикетам, так и по заявкам на разработку) всегда доступна на нашем портале поддержки http://helpdesk.readyscript.ru
Вам необходимо авторизоваться под пользователем с тем же email'ом, от которого вы отправляли нам запросы.

Повысить оценку Понизить оценку

Re: Связи в БД

Нет сбоя небыло. Просто авторизуйтесь у нас в тех. поддержке и всё увидите. Вероятно, письмо по ошибка ушло в спам как вариант.