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

Помощь с model файлом


Recommended Posts

Здравствуйте!

Изложу ситуацию подробно.

Разработчик по аналогии с системой товаров добавил на сайт свою. Она использовала несколько таблиц, но в рамках данного диалога интересуют две:

основная, в которой содержится id, причастность к категории и т.д. и description, где были изображения.

Я сумел прописать для админки все, но для каталога возникла проблемка. 

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

Так вот, названия таблиц: winery и winery_description, добавилась winery_images, где теперь содержатся все адреса изображений, а функция getWinery выглядит так.

    public function getWinery($winery_id) {
        $query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "winery i LEFT JOIN " . DB_PREFIX . "winery_description id ON (i.winery_id = id.winery_id) LEFT JOIN " . DB_PREFIX . "winery_to_store i2s ON (i.winery_id = i2s.winery_id) WHERE i.winery_id = '" . (int)$winery_id . "' AND id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND i.status = '1'");

        return $query->row;
    }
 

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


Не нужно применять DISTINCT ко всем полям...

Вот почищенный запрос:
 

public function getWinery($winery_id) {
	$sql = "
		SELECT i.*       <- Здесь также можно добавить выборку других полей
		FROM " . DB_PREFIX . "winery a1
		LEFT JOIN " . DB_PREFIX . "winery_description a2 ON a2.winery_id = a1.winery_id
		LEFT JOIN " . DB_PREFIX . "winery_to_store a3 ON a3.winery_id = a1.winery_id
		LEFT JOIN " . DB_PREFIX . "winery_images a4 ON a4.winery_id = a1.winery_id
		WHERE a1.winery_id = '" . (int)$winery_id . "'
		  AND a1.status = '1'
		  AND a2.language_id = '" . (int)$this->config->get('config_language_id') . "'
		  AND a3.store_id = '" . (int)$this->config->get('config_store_id') . "'
		LIMIT 1
    ";

    $query = $this->db->query($sql);

    return $query->row;
}


Также $this->config->get('config_store_id')  не будет работать в админке, значение из админки будет всегда равно NULL

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

Тогда запрос не будет эффективный (из-за того что мы дублируем описание для каждой строки).
Лучше делать загрузку картинок отдельным запросом.

public function getWinery($winery_id) {
	$sql = "
		SELECT i.*, a2.description      <- Здесь также можно добавить выборку других полей
		FROM " . DB_PREFIX . "winery a1
		LEFT JOIN " . DB_PREFIX . "winery_description a2 ON a2.winery_id = a1.winery_id
		INNER JOIN " . DB_PREFIX . "winery_to_store a3 ON a3.winery_id = a1.winery_id
		WHERE a1.winery_id = '" . (int)$winery_id . "'
		  AND a1.status = '1'
		  AND a2.language_id = '" . (int)$this->config->get('config_language_id') . "'
		  AND a3.store_id = '" . (int)$this->config->get('config_store_id') . "'
		LIMIT 1
    ";

    $query = $this->db->query($sql);
    
    return $query->row;
}

public function getWineryImages($winery_id) {
    $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "winery_images WHERE winery_id = '" . (int)$winery_id . "'");
    
    return $query->rows;
}

 

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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