我有这些模特:
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',)); ?>
现在我可以为State
设置Prefix
。但是,当我提交表单时,选择会消失。它不会保存在数据库中。
我做错了什么?
答案 0 :(得分:1)
您将模型链接为每个前缀只有一个状态,并且许多前缀“已分配”到一个状态。这意味着您无法使用'multiple' => 'checkbox'
。因此要么删除它,要么将模型关联更改为HABTM。
答案 1 :(得分:0)
首先,hasMany
和belongsTo
的外键必须相同。如果在父模型中您提供了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包含您需要的所有ifnormation。
至于命名hasMany
的输入字段,您可以这样命名:
$this->Form->input('ParentModel.fieldname');
$this->Form->input('ChildModel.0.fieldname');