2017-06-21 56 views
0

我正在使用Prestashop 1.7.1.2。 我想创建一个扩展ObjectModel类,但我需要有一个主要的Id类型的字符串,而不是一个整数。 我该如何做到这一点,我是否必须重写ORM的load()函数?使用字符串作为ID类型扩展ObjectModel

在此先感谢

回答

0

到目前为止没有人帮助您。我会尽力与你一起思考。我不是prestashop开发的专家。但希望能让你更进一步。

这是我如何制作我的ObjectModel。您的主ID是否在您的phpmyadmin表中配置为字符串?

/** 
* @see ObjectModel::$properties 
*/ 
public $id_product; 
public $serial_key; 

/** 
* @see ObjectModel::$definition 
*/ 

public static $definition = array(
    'table' => 'avanto_keys', 
    'primary' => 'id_avanto_keys', 
    'multilang' => FALSE, 
    'fields' => array(
     'id_product' =>   array('type' => self::TYPE_ID), 
     'serial_key' =>   array('type' => self::TYPE_STRING), 
    ), 
); 
+0

谢谢你的尝试。是的,它被配置为varchar(64)(因为它是一个具有来自mssql数据库的Guid的交叉引用字段)。因此,当我创建该类的新实例时,ID字段被转换/解析为一个Int(在这种情况下为id_avanto_keys)。我使用了一种解决方法,我认为它的工作。 –

+0

嗨。你能和我们分享解决方案吗?也许我们有一天会需要它。谢谢! – vanhims

0

当然,我怎么忘了!我将prestashop的产品ID保留为主键,并将外部参照ID作为索引列。当我需要使用外部参照Id进行实例化时,我运行一个直接的Db查询,然后对该对象进行水合。这也可以被改进以在外部参考ID或主要ID实例化之间进行选择。

class ProductXrefMap extends ObjectModel { 
    public $id_xref; //guid from mssql 
    public $date;  
    public $force_id = true; 
    public static $definition = array(
     'table' => 'product_xref_table', 
     'primary' => 'id_product', //prestashop's product id 
     'fields' => array(
      'id_xref' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'required' => true, 'size' => 64), 
      'date' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'required' => true) 
     ) 
    ); 
    public function __construct ($id_xref=null) 
    { 
     parent::__construct(); 
     if ($id_xref) 
     { 
      $sql_select = "SELECT * FROM " . _DB_PREFIX_ . "product_xref_table WHERE id_xref = '" . $id_xref . "'"; 
      if ($row = Db::getInstance()->getRow($sql_select)) 
       $this->hydrate($row); 
     } 
    } 
}