2013-05-10 109 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