Что я сделал не так с Db :: getInstance () -> insert ('product', $ dimension));не вставлять данные в базу данных? - PullRequest
0 голосов
/ 18 сентября 2018

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

public function hookActionProductUpdate($params)
{
    if(Tools::isSubmit('submitDimension'))
    {
        $name = Tools::getValue('name');
        $length = Tools::getValue('custom_length');
        $width = Tools::getValue('custom_width');


        if(empty($name) || !Validate::isGenericName($name))
            $this->errors[] = $this->module->l('Invalid name');
        if(empty($length) || !Validate::isGenericName($length))
            $this->errors[] = $this->module->l('Invalid length');
        if(empty($width) || !Validate::isGenericName($width))
            $this->errors[] = $this->module->l('Invalid width');

            if(!$this->errors)
            {
            $dimension = array(
                'name' => $name,
                'custom_length' => $length,
                'custom_width' => $width

            );

            if(!Db::getInstance()->insert('product', $dimension));
                $this->errors[] = Tools::displayError('Error while updating database');
        }
    }
}

Любой может помочь мне, пожалуйста ..

Вот моя функция установки

function install()
    {
        if (!parent::install() || 
            !$this->alterProductTable() ||
            !$this->registerHook('extraright') || 
            !$this->registerHook('displayAdminProductsExtra') || 
            !$this->registerHook('actionProductSave') ||
            !$this->registerHook('actionProductUpdate') || 
            !$this->registerHook('header')
            )
        return false;
        return true;
    }

Вот моя табличная функция alter

 private function alterProductTable($method = 'add') 
        {
            if($method = 'add')
                $sql = '
                    ALTER TABLE '._DB_PREFIX_.'product 
                    ADD COLUMN `custom_length` decimal(20,6) NOT NULL, 
                    ADD COLUMN `custom_width` decimal(20,6) NOT NULL,
                    ADD COLUMN `name` VARCHAR(64) NOT NULL';

                if(!Db::getInstance()->Execute($sql))
                    return false;
                return true;
        }
.. the columns are there..

And here is my display admin hook
public function hookDisplayAdminProductsExtra($params)
    {
        $name = Db::getInstance()->getValue('SELECT `name` FROM '._DB_PREFIX_.'product WHERE id_product = '.Tools::getValue('id_product'));
        $length = Db::getInstance()->getValue('SELECT custom_length FROM '._DB_PREFIX_.'product WHERE id_product = '.(int)Tools::getValue('id_product'));
        $width = Db::getInstance()->getValue('SELECT custom_width FROM '._DB_PREFIX_.'product WHERE id_product = '.(int)Tools::getValue('id_product'));
        $this->context->smarty->assign(array(
            'name' => $name,
            'length' => $length,
            'width' => $width
        ));
        return $this->display(__FILE__, 'views/templates/hook/adminProductsExtra.tpl');
    }

Я смотрю на это в течение 2 дней ... и я не могу понять, что я сделал неправильно ... Я пошел на форум prestashop, но пока не помогаю ... Надеюсь, я смогу что-то получить от хороших людей здесь. заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

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

$product = new Product()
$product->id_tax_rules_group = 1;
$product->redirect_type = '404';
$product->name = array(
    $id_lang => 'Product name in this lang',
    $id_lang => 'Product name in this lang',
);
/*
 * And so on all the mandatory fields
 */
$product->save();
0 голосов
/ 18 сентября 2018

Проверяете ли вы руководство по лучшей практике Prestashop db, если нет, пожалуйста, проверьте сначала.Это неправильный способ вставки данных, вам также нужно упомянуть поля, в которые вы хотите вставить данные конкретной таблицы. Лучшие практики класса Db - Prestashop

...