2017-06-21 7 views

答えて

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を主キーとして、xref idをインデックス付きの列として保持しました。 xref Idを使用してインスタンス化する必要があるときは、直接Dbクエリを実行してからオブジェクトを水和させます。これは、xref idまたはprimary 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); 
     } 
    } 
} 
関連する問題