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

Ошибки при кешировании


MaJIon

Recommended Posts

Здравствуйте, пытаюсь закэшировать опции товара, но получаю ошибки, подскажите что я делаю не так? 
Сам файл кэша появляется, опции в файле кэшируются, но почему-то не выводится

Ошибки следующие: 

1. rying to access array offset on value of type int in

2. : Invalid argument supplied for foreach() in
3. : Trying to access array offset on value of type int in


Модель 

public function getProductOptions($product_id) {
		
		$product_option_data = array();
		
		$product_option_cache = $this->cache->get('product.option.' . (int)$product_id);
		 
		if (!$product_option_cache) {
			$product_option_cache = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order");

			foreach ($product_option_cache->row as $product_option_value) {
				 
				$product_option_value_data = array();
				
				$product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order");
			 
				foreach ($product_option_value_query->rows as $product_option_value) {
				 
					$product_option_value_data[] = array(
						'product_option_value_id' => $product_option_value['product_option_value_id'],
						'option_value_id'         => $product_option_value['option_value_id'],
						'name'                    => $product_option_value['name'],
						'image'                   => $product_option_value['image'],
						'quantity'                => $product_option_value['quantity'],
						'subtract'                => $product_option_value['subtract'],
						'price'                   => $product_option_value['price'],
						'price_prefix'            => $product_option_value['price_prefix'],
						'weight'                  => $product_option_value['weight'],
						'weight_prefix'           => $product_option_value['weight_prefix']
					);
				}

				$product_option_data[] = array(
					'product_option_id'    => $product_option['product_option_id'],
					'product_option_value' => $product_option_value_data,
					'option_id'            => $product_option['option_id'],
					'name'                 => $product_option['name'],
					'type'                 => $product_option['type'],
					'value'                => $product_option['value'],
					'required'             => $product_option['required']
				);
			}
			$this->cache->set('product.option.' .  (int)$product_id, $product_option_cache);
		}

		return $product_option_cache;
	}

 

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


57 минут назад, MaJIon сказал:

$product_option_cache->row

 

57 минут назад, MaJIon сказал:

Invalid argument supplied for foreach()

покажи на каких строках оибка и кэш

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

13 минут назад, esculapra сказал:

 

покажи на каких строках оибка и кэш




$product_option_cache

 

Да он не те переменные кэширует) Нужно кэшировать $product_option_data, а он результат запроса кэширует, еще и отдает этот резалт вместо того что нужно. 

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

 

1 час назад, MaJIon сказал:

$this->cache->set('product.option.' . (int)$product_id, $product_option_cache);

 

12 минут назад, halfhope сказал:

Да он не те переменные кэширует) Нужно кэшировать $product_option_data, а он результат запроса кэширует, еще и отдает этот резалт вместо того что нужно. 

Соверенно верно

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

Я еще профан в php, поэтому сразу не понял. Спасибо за подсказку, переделал и все кэширует как надо

По поводу вашей оптимизации есть ли смысл мне делать, если у меня всего 200 опций, и они на каждый товар почти одинаковые? Я из-за этого и решил закешировать их)

 

1 час назад, halfhope сказал:

 

Да он не те переменные кэширует) Нужно кэшировать $product_option_data, а он результат запроса кэширует, еще и отдает этот резалт вместо того что нужно. 

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


17 минут назад, MaJIon сказал:

Я еще профан в php, поэтому сразу не понял. Спасибо за подсказку, переделал и все кэширует как надо

По поводу вашей оптимизации есть ли смысл мне делать, если у меня всего 200 опций, и они на каждый товар почти одинаковые? Я из-за этого и решил закешировать их)

 

По-ситуации. Без тестов ничего не ясно)

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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