2013-05-10 48 views
0

關係,我有這些模型:CakePHP的保存在其他模型

class Prefix extends AppModel { 
    public $displayField = 'prefix'; 

    public $hasMany = array(
     'State' => array(
      'className' => 'State', 
      'foreignKey' => 'prefix_id', 
      'dependent' => false, 
     ), 
    ); 
} 

class State extends AppModel { 
    public $displayField = 'name'; 

    public $belongsTo = array(
     'Prefix' => array(
      'className' => 'Prefix', 
      'foreignKey' => 'prefix_id', 
     ), 
    ); 
} 

然後,我有這個admin_add方法,從自動棚架:

public function admin_add() { 
    if ($this->request->is('post')) { 
     $this->Peefix->create(); 
     if ($this->Prefix->save($this->request->data)) { 
      $this->redirect(array('action' => 'index')); 
     } else { 
          // Error message 
     } 
    } 
    $states = $this->Prefix->State->find('list'); 
    $this->set(compact('states')); 
} 

我也有他們的列表中的我形式:

<?php echo $this->Form->input('State', array('multiple' => 'checkbox', 'type' => 'select',)); ?> 

現在我可以爲Prefix設置State秒。但是,當我提交表單時,選擇消失。它不保存在數據庫中。

我做錯了什麼?

回答

1

你鏈接的模型作爲如果每個前綴只有一個狀態,許多前綴「分配」到一個狀態。這意味着你不能使用'multiple' => 'checkbox'。所以要麼刪除它或將模型關聯改爲HABTM。

0

首先,hasManybelongsTo的外鍵都必須相同。如果在父模型中您提供了invoice_circle_id作爲關鍵字,那麼在子模型中也必須提供相同的關鍵字。顯然,該字段必須存在於子表中。請參閱此處以獲取更多信息http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

第二 - 您可能想要使用saveAll()或saveAssociated()方法保存鏈接的模型數據。再次 - http://book.cakephp.org/2.0/en/models/saving-your-data.html包含您需要的所有信息。

至於命名輸入字段爲hasMany,你的名字他們是這樣的:

$this->Form->input('ParentModel.fieldname'); 
$this->Form->input('ChildModel.0.fieldname'); 
+0

我看過,但我無法找到它如何適用於我的情況。我必須爲每個'$ state'編寫'$ this-> Form-> input('State。'。$ i。'.prefix_id');''什麼會被視爲價值? – Lanbo 2013-05-10 09:17:45

+0

外鍵將自動給予每個狀態,但是,您需要手動給其他狀態字段賦值。 – Deez 2013-05-10 09:23:13

+0

好吧,但外鍵是我想賦予狀態字段的唯一值......我認爲最好是手動將其設置在控制器上。 – Lanbo 2013-05-10 09:29:16

相關問題