1

Estoy trabajando en un módulo de Prestashop donde necesito ejecutar una consulta a una tabla para obtener un valor y sumarlo, el problema es que me esta arrojando un error, es primera vez que trabajo un módulo de Prestashop y quede algo perdido.

Este es mi código y aquí es donde tengo el error:

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS("SELECT `value` FROM `" . _DB_PREFIX_ . "feature_product`  
            INNER JOIN  `" . _DB_PREFIX_ . "feature_value_lang` ON `" . _DB_PREFIX_ . "feature_product.id_feature_value` = `" . _DB_PREFIX_ . "feature_value_lang.id_feature_value` 
            WHERE `" . _DB_PREFIX_ . "feature_product.id_feature` = 762");

y lo tengo dentro de esta funcion

private function calcularNumBultos($order)
    {
        $numBultos = 0;
        $products = $order->getProducts();
        
        foreach($products as $key => $product)
        {
            $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS("SELECT `value` FROM `" . _DB_PREFIX_ . "feature_product`  
            INNER JOIN  `" . _DB_PREFIX_ . "feature_value_lang` ON `" . _DB_PREFIX_ . "feature_product.id_feature_value` = `" . _DB_PREFIX_ . "feature_value_lang.id_feature_value` 
            WHERE `" . _DB_PREFIX_ . "feature_product.id_feature` = 762");

            $numBultos += array_sum($result);
            dd($numBultos);

        }
        //die($numBultos);
        return $numBultos;
    }

Esta función la llamo dentro del proceso del carro de compras en el cual busco obtener unos valores dentro de las características del producto y sumarlas

El error que me arroja es este:

Unknown column 'ps_feature_product.id_feature_value' in 'on clause'

introducir la descripción de la imagen aquí

introducir la descripción de la imagen aquí

6
  • Lo que te dice es que la tabla ps_feature_product no tiene una columna llamada id_feature_value, ¿es posible que esté mal escrita el nombre de la columna?
    – nashuald
    Commented el 1 abr. 2022 a las 1:15
  • si la tiene amigo, esta bien escrito tambien el nombre... Commented el 1 abr. 2022 a las 1:40
  • 1
    El error está claro. Revisa si existe la tabla y la columna o la conexión a la base de datos correcta. Poco más podemos aportar con esos datos.
    – masterguru
    Commented el 1 abr. 2022 a las 9:40
  • la tabla existe amigo, de todas formas dejo captura en actualizacion del post Commented el 1 abr. 2022 a las 12:28
  • La columna es id_product y estás usando id_product_value, solo elimina _value y ya debe funcionar.
    – Triby
    Commented el 1 abr. 2022 a las 14:26

2 respuestas 2

1

Prueba cambiando las comillas dobles por las simples y quitando las comillas invertidas salvo a value, para que coja el nombre del campo que le quieres asignar en lugar del VALUE de SQL. Si te da igual el nombre del campo, deja el valor predeterminado quitando AS value, pero teniendo en cuenta que no tiene ningún campo llamado value es id_feature_value. También he dejado la sentencia en una variable, porque me gusta hacerlo así, pero puedes obviarlo.

private function calcularNumBultos($order)
{
    $numBultos = 0;
    $products = $order->getProducts();
    $sql = 'SELECT fp.id_feature_value AS `value` FROM ' . _DB_PREFIX_ . 'feature_product fp  
        INNER JOIN  ' . _DB_PREFIX_ . 'feature_value_lang fvl ON fvl.id_feature_value = fp.id_feature_value 
        WHERE fp.id_feature = 762';
    
    foreach($products as $key => $product)
    {
        $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);

        $numBultos += array_sum($result);
        dd($numBultos);

    }
    //die($numBultos);
    return $numBultos;
}
1

El código de arriba queda más bonito. Sin embargo, el problema viene de estar poniendo la comilla invertida también a la tabla, debe ser solo para el campo, quedando así.

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS("SELECT `value` FROM " . _DB_PREFIX_ . "feature_product  
        INNER JOIN " . _DB_PREFIX_ . "feature_value_lang ON " . _DB_PREFIX_ . "feature_product.`id_feature_value` = " . _DB_PREFIX_ . "feature_value_lang.`id_feature_value` 
        WHERE " . _DB_PREFIX_ . "feature_product.`id_feature` = 762");

Otra opción es hacerlo para la tabla por un lado y el campo por otro, pero nunca juntos. Quedaría así:

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS("SELECT `value` FROM `" . _DB_PREFIX_ . "feature_product`  
        INNER JOIN `" . _DB_PREFIX_ . "feature_value_lang` ON `" . _DB_PREFIX_ . "feature_product`.`id_feature_value` = `" . _DB_PREFIX_ . "feature_value_lang`.`id_feature_value` 
        WHERE `" . _DB_PREFIX_ . "feature_product`.`id_feature` = 762");

Eso contando con que tengas value en esa tabla, que por defecto no viene, si no sería id_feature_value

Un saludo.

1
  • Efectivamente, el problema es que agrupa tabla y campo dentro de ``. Por lo demás, quería aclarar que el campo value sí está. Es de la tabla feature_value_lang. Commented el 1 oct. 2022 a las 3:11

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.