2016-03-15 42 views
0

實際上,在我的場景中,我在模型的構造函數中綁定了關係。實際上,我需要在模型關係中使用模型屬性,並且CakePHP阻止在默認關係中使用模型屬性。所以我不能使用依賴不能在__construct函數中綁定關係時起作用 - CAKEPHP

public $hasMany = array(
     'ProductDetail' => array(
      'className' => 'ProductDetail', 
      'conditions' => array(
       'ProductDetail.language_id' => $this->languageId //Throws error 
      ), 
      'dependent' => true 
     ), 
    ); 

所以我做了一個小把戲。我在模型的__construct()函數上綁定了模型關係。以下是我的代碼

public function __construct($id = false, $table = null, $ds = null) { 
     parent::__construct($id, $table, $ds); 
     $this->bindModel(array(
      "hasMany" => array(
       'ProductDetail' => array(
        'className' => 'ProductDetail', 
        'dependent' => true, 
        'conditions' => array(
         'ProductDetail.language_id' => $this->languageId //Doesn't throw an error 
        ) 
       ) 
      ) 
       ) 
     ); 
    } 

這個技巧適用於每種情況。但是當我刪除一個產品時,依賴模型不能被刪除,當我根據__construct()函數綁定關係時。有什麼辦法可以使這個技巧工作,或者我需要手動觸發相關功能?

回答

0

經過研究,我發現通過第二個參數falsebindModel函數。因爲這會使您的動態綁定持續到請求的持續時間。所以在這種情況下Model::bindModel功能看起來像

$this->bindModel(array(
      "hasMany" => array(
       'ProductDetail' => array(
        'className' => 'ProductDetail', 
        'dependent' => true, 
        'conditions' => array(
         'ProductDetail.language_id' => $this->languageId 
        ) 
       ) 
      ) 
       ), false 
     );