我正在使用Prestashop 1.7.1.2。 我想创建一个扩展ObjectModel的类,但我需要一个主Id类型的字符串,而不是一个整数。 我怎样才能实现这一点,我是否必须覆盖ORM的load()函数?
提前致谢
答案 0 :(得分:1)
当然,我怎么忘了!我将prestashop的产品ID保留为主键,将xref id保留为索引列。当我需要使用外部参照Id进行实例化时,我运行一个直接的Db查询,然后我给这个对象加水。这也可以改进,以在xref 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);
}
}
}
答案 1 :(得分: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),
),
);