Jump to content

Requête SQL sur module personnalisé renvoie : Unknown column 'sa.id_shop' in 'on clause'


Recommended Posts

Bonjour,

Je suis en train de créer un module personnalisé permettant d'associer les produits d'une boutique à une autre (car prestashop ne le fait pas nativement). L'association se passe bien mais j'ai un problème d'affichage dans la liste des produits du dashboard. Par exemple j'ai un produit nommé "Produit A" dans ma boutique A. Mon module me permet de copier ce produit dans la boutique B (même infos mais seul le nom du produit change). Si dans la boutique B il est nommé "Produit B", en contexte "toutes les boutiques", le produit est listé 2 fois avec le même nom, soit "Produit A", "Produit A" au lieu de "Produit A", "Produit B"

Pour tenter de régler ce problème, dans mon fichier de module je tente :

	public function hookActionAdminProductsListingFieldsModifier($params)
    {   
        // Get the shop context adapter from the service container
        $shopContext = $this->get('prestashop.adapter.shop.context');
        if ($shopContext->isAllContext()) {
            $params['sql_table']['sa'] = [
                'table' => 'product_shop',
                'join' => 'LEFT JOIN',
                'on' => 'p.id_product = sa.id_product',
            ];

            $params['sql_table']['shop'] = [
                'table' => 'shop',
                'join' => 'LEFT JOIN',
                'on' => 'shop.id_shop = sa.id_shop',
            ];

            // Selectionne le nom du produit en fonction du shop id
            $params['sql_table']['pl'] = [
                'table' => 'product_lang',
                'join' => 'LEFT JOIN',
                'on' => 'pl.`id_product` = p.`id_product` AND pl.`id_lang` = 1 AND pl.id_shop = sa.id_shop',
            ];
        }

Hélas, cela me retourne :

Unknown column 'sa.id_shop' in 'on clause'

dont voici la requête complète

p.`id_product` AS `id_product`,
p.`reference` AS `reference`,
sa.`price` AS `price`,
p.`id_shop_default` AS `id_shop_default`,
p.`is_virtual` AS `is_virtual`,
pl.`name` AS `name`,
pl.`link_rewrite` AS `link_rewrite`,
sa.`active` AS `active`,
shop.`name` AS `shopname`,
image_shop.`id_image` AS `id_image`,
cl.`name` AS `name_category`,
0 AS `price_final`,
pd.`nb_downloadable` AS `nb_downloadable`,
sav.`quantity` AS `sav_quantity`,
IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`,
shop.`color` AS `shop_color`,
pl.`name` AS `name_from_shop`
FROM `ps_product` p
LEFT JOIN `ps_product_lang` pl ON (pl.`id_product` = p.`id_product` AND pl.`id_lang` = 1 AND pl.id_shop = sa.id_shop)
LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = p.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop_group = 1 AND sav.id_shop = 0 )
LEFT JOIN `ps_product_shop` sa ON (p.id_product = sa.id_product)
LEFT JOIN `ps_category_lang` cl ON (sa.`id_category_default` = cl.`id_category` AND cl.`id_lang` = 1 AND cl.`id_shop` = p.id_shop_default)
LEFT JOIN `ps_category` c ON (c.`id_category` = cl.`id_category`)
LEFT JOIN `ps_shop` shop ON (shop.id_shop = sa.id_shop)
LEFT JOIN `ps_image_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.`cover` = 1 AND image_shop.`id_shop` = p.id_shop_default)
LEFT JOIN `ps_image` i ON (i.`id_image` = image_shop.`id_image`)
LEFT JOIN `ps_product_download` pd ON (pd.`id_product` = p.`id_product`)
WHERE (1 AND p.`id_product` BETWEEN 6635.000000 AND 6635.000000 AND state = 1);

Je m'arrache les cheveux à régler ce problème.

La jointure qui fonctionne et étant celle par défaut utilisée par Prestashop:

LEFT JOIN `ps_product_lang` pl ON (pl.`id_product` = p.`id_product` AND pl.`id_lang` = 1 AND pl.`id_shop` = p.id_shop_default) 

Mais comme dit, cette jointure ne me plait pas car pour un produit partagé entre boutiques elle compare product_lang.id_shop à product.id_shop_default, ce qui me retourne le même nom de produit en contexte "Toutes Les Boutiques" malgré qu'ils aient un nom différent dans chacune de leur boutique. En revanche dans le contexte de leur propre boutique chaque produit s'affichent avec le nom attendu. Donc pas de soucis à ce niveau.

Si quelqu'un a une idée...

Edited by Titi2 (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...