我有两个一对一关系的模型,比如一个人和一个帽子。外键是Person,所以Person属于Hat,Hat有一个人。
现在在Person的创建表单中,我可以使用自定义find()来查找尚未拍摄的所有Hats,而automagic将为我填充所有可用帽子的组合框。
但是如何为Person设计编辑表单?在这里,我想要一个带有所有可用Hats的组合框以及当前选择的Hat(如果不是null),将当前Hat作为默认选择。
我还没有和Cake合作过一段时间,所以我可能会遗漏一些明显的东西,或者是设计中的问题?
答案 0 :(得分:0)
人物模型:
class Person extends AppModel
{
public $name = 'Person';
public $belongsTo = array('Hat' => array('className' => 'Hat',
'foreignKey' => 'hat_id'));
}
帽子模特:
class Hat extends AppModel
{
public $name = 'Hat';
public $hasOne = array('Person' => array('className' => 'Person',
'foreignKey' => 'hat_id'));
}
未分配给任何人的所有可用帽子:
$avaiable_hats = $this->Hat->find('all', array('conditions' => array('Person.hat_id <> ' => 'Hat.id')));
所有已分配的帽子
$assigned_hats = $this->Person->find('all', array('conditions' => array('Person.hat_id IS NOT NULL',
'Person.hat_id <> 0')));
如果要制作组合框列表,请使用以下命令:
未分配给任何人的所有可用帽子选项
$available_hats_options = $this->Hat->find('list', array('conditions' => array('Person.hat_id <> ' => 'Hat.id'),
'fields' => array('Hat.id', 'Hat.hat_name')));
您可以使用以下语法在视图中创建下拉列表:
$this->Form->input('available_hats', array('options' => $available_hats_options, 'div' => false, 'label' => 'Available Hats'));