我正在使用Prestashop 1.7.1.2。 我想創建一個擴展ObjectModel類,但我需要有一個主要的Id類型的字符串,而不是一個整數。 我該如何做到這一點,我是否必須重寫ORM的load()函數?使用字符串作爲ID類型擴展ObjectModel
在此先感謝
我正在使用Prestashop 1.7.1.2。 我想創建一個擴展ObjectModel類,但我需要有一個主要的Id類型的字符串,而不是一個整數。 我該如何做到這一點,我是否必須重寫ORM的load()函數?使用字符串作爲ID類型擴展ObjectModel
在此先感謝
到目前爲止沒有人幫助您。我會盡力與你一起思考。我不是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),
),
);
當然,我怎麼忘了!我將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);
}
}
}
謝謝你的嘗試。是的,它被配置爲varchar(64)(因爲它是一個具有來自mssql數據庫的Guid的交叉引用字段)。因此,當我創建該類的新實例時,ID字段被轉換/解析爲一個Int(在這種情況下爲id_avanto_keys)。我使用了一種解決方法,我認爲它的工作。 –
嗨。你能和我們分享解決方案嗎?也許我們有一天會需要它。謝謝! – vanhims