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

сформировать запрос для получения значений из таблицы "product" в списке заказов в личном кабинете покуателя


Recommended Posts

Всем привет.  разбираюсь с проблемой- в истории заказов в личном кабинете вывести поле mpn товара получилось. но в списке заказов не удается. возможно кто то подскажет, как изменить запрос,

 $order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$order_id . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND order_status_id > '0'");

чтобы он подтягивал данные таблицы product?

спасибо

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


7 минут назад, mpn2005 сказал:

Если это в списке заказов,  то для каждого заказа делаем такой запрос.

спасибо что откликнулись. суть в чем- вот так я получаю данные из таблицы order

model 

class ModelAccountOrder extends Model {
	public function getOrder($order_id) {
		$order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$order_id . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND order_status_id > '0'");

		if ($order_query->num_rows) {
			$country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['payment_country_id'] . "'");

			if ($country_query->num_rows) {
				$payment_iso_code_2 = $country_query->row['iso_code_2'];
				$payment_iso_code_3 = $country_query->row['iso_code_3'];
			} else {
				$payment_iso_code_2 = '';
				$payment_iso_code_3 = '';
			}

			$zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['payment_zone_id'] . "'");

			if ($zone_query->num_rows) {
				$payment_zone_code = $zone_query->row['code'];
			} else {
				$payment_zone_code = '';
			}

			$country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['shipping_country_id'] . "'");

			if ($country_query->num_rows) {
				$shipping_iso_code_2 = $country_query->row['iso_code_2'];
				$shipping_iso_code_3 = $country_query->row['iso_code_3'];
			} else {
				$shipping_iso_code_2 = '';
				$shipping_iso_code_3 = '';
			}

			$zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['shipping_zone_id'] . "'");

			if ($zone_query->num_rows) {
				$shipping_zone_code = $zone_query->row['code'];
			} else {
				$shipping_zone_code = '';
			}

			return array(
				'order_id'                => $order_query->row['order_id'],
				'invoice_no'              => $order_query->row['invoice_no'],
				'invoice_prefix'          => $order_query->row['invoice_prefix'],
				'store_id'                => $order_query->row['store_id'],
				'store_name'              => $order_query->row['store_name'],
				'store_url'               => $order_query->row['store_url'],
				'customer_id'             => $order_query->row['customer_id'],
				'firstname'               => $order_query->row['firstname'],
				'lastname'                => $order_query->row['lastname'],
				'telephone'               => $order_query->row['telephone'],
				'email'                   => $order_query->row['email'],
				'payment_firstname'       => $order_query->row['payment_firstname'],
				'payment_lastname'        => $order_query->row['payment_lastname'],
				'payment_company'         => $order_query->row['payment_company'],
				'payment_address_1'       => $order_query->row['payment_address_1'],
				'payment_address_2'       => $order_query->row['payment_address_2'],
				'payment_postcode'        => $order_query->row['payment_postcode'],
				'payment_city'            => $order_query->row['payment_city'],
				'payment_zone_id'         => $order_query->row['payment_zone_id'],
                'payment_zone'            => $order_query->row['payment_zone'],
                'payment_custom_field'    => $order_query->row['payment_custom_field'],
				'payment_zone_code'       => $payment_zone_code,
				'payment_country_id'      => $order_query->row['payment_country_id'],
				'payment_country'         => $order_query->row['payment_country'],
				'payment_iso_code_2'      => $payment_iso_code_2,
				'payment_iso_code_3'      => $payment_iso_code_3,
				'payment_address_format'  => $order_query->row['payment_address_format'],
				'payment_method'          => $order_query->row['payment_method'],
				'shipping_firstname'      => $order_query->row['shipping_firstname'],
				'shipping_lastname'       => $order_query->row['shipping_lastname'],
				'shipping_company'        => $order_query->row['shipping_company'],
				'shipping_address_1'      => $order_query->row['shipping_address_1'],
				'shipping_address_2'      => $order_query->row['shipping_address_2'],
				'shipping_postcode'       => $order_query->row['shipping_postcode'],
				'shipping_city'           => $order_query->row['shipping_city'],
				'shipping_zone_id'        => $order_query->row['shipping_zone_id'],
				'shipping_zone'           => $order_query->row['shipping_zone'],
				'shipping_zone_code'      => $shipping_zone_code,
				'shipping_country_id'     => $order_query->row['shipping_country_id'],
				'shipping_country'        => $order_query->row['shipping_country'],
				'shipping_iso_code_2'     => $shipping_iso_code_2,
				'shipping_iso_code_3'     => $shipping_iso_code_3,
				'shipping_address_format' => $order_query->row['shipping_address_format'],
				'shipping_method'         => $order_query->row['shipping_method'],
				'comment'                 => $order_query->row['comment'],
				'total'                   => $order_query->row['total'],
				'order_status_id'         => $order_query->row['order_status_id'],
				'language_id'             => $order_query->row['language_id'],
				'currency_id'             => $order_query->row['currency_id'],
				'currency_code'           => $order_query->row['currency_code'],
				'currency_value'          => $order_query->row['currency_value'],
				'date_modified'           => $order_query->row['date_modified'],
				'date_added'              => $order_query->row['date_added'],
				'ttn'              => $order_query->row['ttn'],
				'ttn_state'              => $order_query->row['ttn_state'],
				'ttnpay'              => $order_query->row['ttnpay'],
				'statedesk'              => $order_query->row['statedesk'],
				'shipttn'              => $order_query->row['shipttn'],
				'ip'                      => $order_query->row['ip']
			);
		} else {
			return false;
		}
	}

в controler я выбираю нужные мне данные для вывода в шаблон

foreach ($results as $result) {
			$product_total = $this->model_account_order->getTotalOrderProductsByOrderId($result['order_id']);
			$voucher_total = $this->model_account_order->getTotalOrderVouchersByOrderId($result['order_id']);

			//steelfeet Вызываем метод из модели
			$order_info = $this->model_account_order->getOrder($result['order_id']);
            
			$this->load->model('checkout/order');
			$data['orders'][] = array(
				'order_id'   => $result['order_id'],
				'ttn'         => $result['ttn'],
			    'ttn_state'      =>  ($result['ttn_state'] == '102' || $result['ttn_state'] == '103' ||$result['ttn_state'] == '108') ? $this->paymentform($result['ttn'], $result['shipttn'], $result['ttnpay']) : "-",
				'earnings' =>  $this->model_checkout_order->getEarnings($result['order_id'], $result['ttn_state'], $result['total']),
				'statedesk'   => $result['statedesk'],
				'shipttn'   => $result['shipttn'],
				'name'       => $order_info['payment_firstname'] . ' ' . $order_info['payment_lastname'],
				'telephone'       => $order_info['telephone'],
				'status'     => $result['status'],
				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
				'products'   => ($product_total + $voucher_total),
				'total'      => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
				'view'       => $this->url->link('account/order/info', 'order_id=' . $result['order_id'], true),
			);
			
			}

но не могу придумать как мне к этим данным для каждого заказа передать данные, например из поля mpn 

подскажите пожалуйста

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


4 минуты назад, Dimasscus сказал:

но не могу придумать как мне к этим данным для каждого заказа передать данные, например из поля mpn 

подскажите пожалуйста

Заказы - это заказы, а товары в заказе - это товары.

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

 

После строки:

$order_info = $this->model_account_order->getOrder($result['order_id']);

Получайте данные по товарам. Что-то вроде такого:

$order_products = $this->model_account_order->getOrderProduct($result['order_id']);

В модели у метода getOrderProduct надо будет добавить JOIN как писал выше.

 

И в контроллере перебирайте и доставайте нужные поля. Только надо учитывать, что товара может уже и не быть.

По хорошему нужные поля нужно тянуть в таблицу order_product.

 

9 минут назад, Dimasscus сказал:

$this->load->model('checkout/order');

Вот это в цикле вообще лишнее.

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

6 минут назад, mpn2005 сказал:

Заказы - это заказы, а товары в заказе - это товары.

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

 

После строки:


$order_info = $this->model_account_order->getOrder($result['order_id']);

Получайте данные по товарам. Что-то вроде такого:


$order_products = $this->model_account_order->getOrderProduct($result['order_id']);

В модели у метода getOrderProduct надо будет добавить JOIN как писал выше.

 

И в контроллере перебирайте и доставайте нужные поля. Только надо учитывать, что товара может уже и не быть.

По хорошему нужные поля нужно тянуть в таблицу order_product.

 

Вот это в цикле вообще лишнее.

суть в том что товар в заказе всегда 1 :)) такова специфика. и товар всегда есть в наличии. поэтому и решил тащить из таблицы товара. спасибо. сейчас попробую

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


5 минут назад, Dimasscus сказал:

суть в том что товар в заказе всегда 1 :)) такова специфика. и товар всегда есть в наличии. поэтому и решил тащить из таблицы товара. спасибо. сейчас попробую

Так с этого и надо было начинать.

 

Тогда что-то вроде этого:

$order_query = $this->db->query("SELECT o.*, p.mpn FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "order_product` op ON (o.order_id = op.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) WHERE o.order_id = '" . (int)$order_id . "' AND o.customer_id = '" . (int)$this->customer->getId() . "' AND o.order_status_id > '0'");

Но я бы так всёравно не делал, а делал по человечески. Т.к. это получается костыль.

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

1 минуту назад, mpn2005 сказал:

Так с этого и надо было начинать.

 

Тогда что-то вроде этого:


$order_query = $this->db->query("SELECT o.*, p.mpn FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "order_product` op ON (o.order_id = op.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) WHERE o.order_id = '" . (int)$order_id . "' AND o.customer_id = '" . (int)$this->customer->getId() . "' AND o.order_status_id > '0'");

Но я бы так всёравно не делал, а делал по человечески. Т.к. это получается костыль.

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

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


1 минуту назад, Dimasscus сказал:

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

Да проще не придумать в контроллере сделать так:

 

$order_mpn = '';

$order_products = $this->model_account_order->getOrderProduct($result['order_id']);

foreach ($order_products as $order_product) {
	if (!empty($order_product['mpn'])) {
		$order_mpn = $order_product['mpn'];
		break;
	}
}

 

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

3 минуты назад, mpn2005 сказал:

Так с этого и надо было начинать.

 

Тогда что-то вроде этого:


$order_query = $this->db->query("SELECT o.*, p.mpn FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "order_product` op ON (o.order_id = op.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) WHERE o.order_id = '" . (int)$order_id . "' AND o.customer_id = '" . (int)$this->customer->getId() . "' AND o.order_status_id > '0'");

Но я бы так всёравно не делал, а делал по человечески. Т.к. это получается костыль.

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

$query = $this->db->query('SELECT * FROM `' . DB_PREFIX . $object . '_simple_fields` WHERE `'.$object.'_id` = \'' . $objectId . '\' LIMIT 1');

как его переиначить, чтобы он не выводил значение- а записывал в таблицу данные? ну то есть не select а insert использовать?

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


6 минут назад, Dimasscus сказал:

как его переиначить, чтобы он не выводил значение- а записывал в таблицу данные? ну то есть не select а insert использовать?

А зачем туда что-то вставлять? Симпла сама с этим справляется.

Чтобы что-то туда вставить нужно чётко понимать, что у куда надо вставить. Выборка и вставка данных - это не одинаковые процессы.

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

15 минут назад, mpn2005 сказал:

А зачем туда что-то вставлять? Симпла сама с этим справляется.

Чтобы что-то туда вставить нужно чётко понимать, что у куда надо вставить. Выборка и вставка данных - это не одинаковые процессы.

да по симпле-бог с ней. скорее всего я там переделаю чтоб юзалось поле из таблицы заказа а не из симплы. туда просто надо вписывать текстовые данные, время.зачем заюзано было это поле я сам не знаю:)) был в отпуске, по возвращении мне сообщили ,что уже создали в симпле поле, приципили к нему приложение, выгрузку- и осталось только мне теперь это реализовать заполнение этого поля (вывести в список заказов input и писать в базу). обновляться данные этого поле не будут- просто оно либо заполнено и содержит данные которые нельзя изменить,либо оно пустое.

 

я прошу еще пару минут внимания- не получилось все ж с тем мпн. получаю Undefined index: mpn in /

что сделал- в модели заменил запрос на тот что вы предложили, в запросах добавил 'mpn'              => $order_query->row['mpn'], 

в контролере 'mpn'         => $result['mpn'],

в шаблон <td class="pts-text-left">{{ order.mpn }} </td> 

моды обновил. в чем проблема- не пойму

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


11 минут назад, Dimasscus сказал:

'mpn'         => $result['mpn'],

Тут ошибка.

Надо так:

'mpn'         => $order_info['mpn'],

Там же из $result только номер заказ берётся. По умолчанию там не все поля из заказа модель возвращает.

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

спасибо. все получилось.

но натусил новую траблу :(

создал в таблице order поле  datereturnpay https://clip2net.com/s/47SZtOn

в модели его позвал 'datereturnpay'    => $order_query->row['datereturnpay'],

в контролере указал 'datereturnpay'  => $order_info['datereturnpay'],

в твиге добавляю {{ order.datereturnpay }} - не выводится, но и ошибок нет

прописал {{ dump(order.datereturnpay) }}  получаю https://clip2net.com/s/47SZyDH

 

просто руки опустились и я хз что делать. в чем проблема не пойму вообще

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


'datereturnpay'  => $result['datereturnpay'], поменял на result потому что все почти переменные там так подключаются и работают без ошибок- в итоге получаю Undefined index: datereturnpay in

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


3 минуты назад, Dimasscus сказал:

'datereturnpay'  => $result['datereturnpay'],

Так неправильно. Все данные в массиве $order_info.

Сделайте в контроллере print_r($order_info)

И проверте, что возвращает модель.

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

46 минут назад, mpn2005 сказал:

Так неправильно. Все данные в массиве $order_info.

Сделайте в контроллере print_r($order_info)

И проверте, что возвращает модель.

действительно все именно так.

надо будет разобраться на досуге зачем же там столько выводом с ресультом.:))

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

спасибо вам за помощь

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


17 часов назад, mpn2005 сказал:

А зачем туда что-то вставлять? Симпла сама с этим справляется.

Чтобы что-то туда вставить нужно чётко понимать, что у куда надо вставить. Выборка и вставка данных - это не одинаковые процессы.

отказался от реализацией через поле в симпле. создал в ордере, все четко выводит. но возник вопрос- в функции public function getOrder($order_id) { есть запрос select который получает данные из нужных таблиц.. а как реализовать теперь запись из нужной переменной в таблицу? добавить запрос c insert для нужной таблицы ?

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


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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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