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

[Решено] Дублировать данные из одной таблицы в другую


Einshtein

Recommended Posts

Нужно в бд дублировать данные при заказе товара в таблицу Order_product (колонка upc) из таблицы product (колонка upc)

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

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

Я залез в бд и решил посмотреть в чем дело. Оказалось что в таблице Product все данные сохраняются нормально, но в order_product стоит значение "0", хотя если вручную в базе вбить название поставщика в эту колонку, в этом заказе в админке всё нормально показывает. Вот я и подумал что нужно каким то образом вытягивать данные из таблицы product.

Для этого в файле adminmodelsaleorder.php я прописал следующий код (по примеру "model", да и вообще все делал по примеру модели товара)

"', upc = '" . $this->db->escape($return_product['upc']) .

Результат всё равно нулевой.

Так же правкам подвергался admincontrollersaleorder.php

$this->data['entry_upc'] = $this->language->get('entry_upc');

$this->data['column_upc'] = $this->language->get('column_upc');

'upc'			=> $product_info['upc'],

'upc'		 => $product['upc'],

А так же adminviewtemplatesaleorder_info.tpl

<td class="right"><?php echo $column_upc; ?></td>

<td class="right"><?php echo $product['upc']; ?></td>

Мб ктонить подскажет где рыть и в чем я не прав?

Ах да, версия магазина ocstore 1.5.1.3

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


Вот я и подумал что нужно каким то образом вытягивать данные из таблицы product.

Вам нужно расширить модель заказа, а не «вытягивать данные из таблицы product».

Мб ктонить подскажет где рыть и в чем я не прав?

Вы архитектурно неправильно подошли к решению задачи, извините, но Ваш подход напоминает знаменитый подход «танком по воробьям», предполагаю, что это происходит от недопонимания модели MVC и архитектуры OpenCart в целом!

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


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

По моей логике вещей вывести нужную мне колонку из карточки товара в заказ можно по принципу вывода модели товара...

А что вы имели ввиду под "расширить модель заказа" ?

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


Под расширением модели заказа я как раз и подразумевал дополнение модели заказа необходимой Вам информацией (название поставщика)! :wink:

Я реализовывал данную задачу в более широком варианте (список поставщиков с их контактными данными, код товара у поставщика, себестоимость товара у поставщика и т.п.) так что попробую кратко указать на ошибки:

Оказалось что в таблице Product все данные сохраняются нормально, но в order_product стоит значение "0", хотя если вручную в базе вбить название поставщика в эту колонку, в этом заказе в админке всё нормально показывает. Вот я и подумал что нужно каким то образом вытягивать данные из таблицы product.

Таблица order_product по умолчанию не содержит поле upc, так как оно не входит в модель заказа, соответственно не может содержать какие либо данные. Если Вы добавили данное поле самостоятельно, то Вам нужно определиться с подходом, Вы либо «вытягиваете данные из таблицы product» либо расширяете модель заказа, а у Вас получается не то не другое!

Смысл этой строки

"', upc = '" . $this->db->escape($return_product['upc']) .

если в модели товаре уже содержится данная информация ($product['upc'])?

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


Спасибо за ответ.

Сейчас попытаюсь обьяснить что я хочу.

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

Но сейчас мы столкнулись с проблемой когда товаров много, а поставщиков ещё больше. Контакты со всеми поставщиками у нас есть, зная поставщика товара который заказали мы легко выйдем с ним на связь. Для этого я хочу выводить имя поставщика данного товара в заказ.

Так как информации никакой я не нашел по выводу дополнительных строк в заказе, приходится самому разбираться в процессе. И я решил пойти по простому пути взяв за основу код отвечающий за вывод модели товара. В общем то вывести дополнительную колонку в заказ мне удалось, но вот она остается пустой. Вы подтвердили мои подозрения сказав что изначально upc колонка отсутствует в order_product и поэтому неможет содержать данных, вот я и подумал что было бы логично указать ей путь к таблице product и колонке upc в этой таблице. Но как это сделать я не знаю.

Мне пока что не нужно вести статистику и сбор данных о поставщиках. Для этого у меня в скором времени будет модуль 1с. Хочу просто вытягивать данные из карточки товара с "поставщика" в заказ.

Скрины на всякий:

Карточка товара

Изображение

Заказ:

Изображение

Order_product

Изображение

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


Расширяем модель заказа:

1. В файле catalogcontrollercheckoutconfirm.php найдите массив product_data и добавьте после поля tax данную строку:

'upc'		=> $product['upc'],

2. В файле catalogmodelcheckoutorder.php найдите цикл foreach ($data['products'] as $product) и добавьте после (float)$product['tax'] данный кусок кода:

. "', upc = '" . $this->db->escape($product['upc'])

3. В файле systemlibrarycart.php найдите массив product_data и добавьте после поля height данную строку:

'upc'	   => $product_query->row['upc'],

Для проверки того что мы с Вами натворили, проведите тестовый заказ с товаром, у которого прописан поставщик (поле upc) и проверьте через phpMyAdmin поле upc в таблице order_product. Если Вы все сделали правильно, то поле будет заполнено.

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


Я бы данную задачу решал примерно так:

Создал бы таблицу для поставщиков и таблицу для привязки товаров к поставщикам с учетом того что один и тот же товар могут поставлять несколько поставщиков.

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

В заказе записывать всех поставщиков товара - можно, но это плохо... правильнее в не закрытом заказе отображать всех поставщиков, вытягивая их из таблицы поставщиков, а при изменении статуса заказа на "Отгружен" - отмечать в заказе от какого поставщика товар ушел клиенту... эту информацию уже надо писать в таблицу заказов. Это и для статистики и для понимания к какому поставщику обращаться в случае проблем с товаром.

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

Полностью с тобой согласен, именно такое решение я и реализовывал, о чем указал выше:

Я реализовывал данную задачу в более широком варианте (список поставщиков с их контактными данными, код товара у поставщика, себестоимость товара у поставщика и т.п.).

Но если ты перечитаешь тему, то наткнешься на такие слова топикстартера:

Мне пока что не нужно вести статистику и сбор данных о поставщиках. Для этого у меня в скором времени будет модуль 1с. Хочу просто вытягивать данные из карточки товара с "поставщика" в заказ.

Ты описал ситуацию в идеале, но рядовой пользователь (а Einshtein об этом заявил открыто) не способен реализовать ее самостоятельно, поэтому я сделал жест доброй воли и написал для него наиболее простейший вариант расширения модели заказа.
Надіслати
Поділитися на інших сайтах


  • 4 months later...

Хочу поблагодарить CODEONETEAM за помощь :) Прошло несколько месяцев, я набрался немного знаний и вернулся к данной теме. Случайно нашел эту тему и она мне очень помогла :)

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


  • 8 months later...
  • 3 years later...

почему то не получается :( (дублирую sku)

 

во все указанные CODEONETEAM файлы внес поправки согласно образца переменной model

 

ошибка получается в файле

 

2016-11-20 3:24:05 - PHP Notice:  Undefined index: sku in /.../catalog/model/checkout/order.php on line 9

 

в дефолтном файле там код

$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', total = '" . (float)$product['total'] . "', tax = '" . (float)$product['tax'] . "', reward = '" . (int)$product['reward'] . "'");
 

я изменяю так

 

$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', sku = '" . $this->db->escape($product['sku']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', total = '" . (float)$product['total'] . "', tax = '" . (float)$product['tax'] . "', reward = '" . (int)$product['reward'] . "'");
в таблице oc_order_product поле sku вставил после поля model

 

 

подскажите пожалуйста, почему ошибка

 

релиз - OCSHOP.CMS Версия 1.5.6.4

Змінено користувачем cherkas
Надіслати
Поділитися на інших сайтах

причину нашел, как исправить не знаю (

. "', sku = '" . $this->db->escape($product['sku']) .
если в место

$this->db->escape($product['sku'])
вставить

"артикул"

т.е.

. "', sku = '" . "артикул"
то в нужную таблицу в нужное поле попадает значение - артикул

т.е. получается переменная не правильно написана или от куда то не передается.

Змінено користувачем cherkas
Надіслати
Поділитися на інших сайтах

или от куда то не передается.

Это точно, если совсем упростить дебагинг не видя проекта, то просто идите по цепочке, начните с места первой вставки, например здесь: system\library\cart.php так же, как Вы уже делали, замените значение $product_query->row['sku'] на 'test' и проверьте результат и т.д.
Надіслати
Поділитися на інших сайтах


Это точно, если совсем упростить дебагинг не видя проекта, то просто идите по цепочке, начните с места первой вставки, например здесь: system\library\cart.php так же, как Вы уже делали, замените значение $product_query->row['sku'] на 'test' и проверьте результат и т.д.

заменил так

 

$this->data[$key] = array(
	'key'                       => $key,
	'product_id'                => $product_query->row['product_id'],
	'name'                      => $product_query->row['name'],
	'model'                     => $product_query->row['model'],
	'sku'                     => "test",

...

в БД ничего не попало

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

там в 2-х местах добавлен sku и в одном месте column_sku

 

вроде бы всё правильно, я скопировал строку model  и поменял только имя переменной

confirm.php

Змінено користувачем cherkas
Надіслати
Поділитися на інших сайтах

На первый взгляд действительно все верно.

 

 

с одной стороны это радует конечно :)

 

а с другой всё равно не работает

 

а есть еще какие нибудь варианты/мысли по этому поводу?

Змінено користувачем cherkas
Надіслати
Поділитися на інших сайтах

а есть еще какие нибудь варианты/мысли по этому поводу?

Возможны мелкие отличия в коде ocstore 1.5.1.3 и OCSHOP.CMS 1.5.6.4, но это уже нужно смотреть на живую, а я со свободным временем к сожалению, не дружу.
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

Important Information

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