如何制作一对一关系的编辑表单?

时间:2013-07-03 12:02:49

标签: cakephp cakephp-1.3

我有两个一对一关系的模型,比如一个人和一个帽子。外键是Person,所以Person属于Hat,Hat有一个人。

现在在Person的创建表单中,我可以使用自定义find()来查找尚未拍摄的所有Hats,而automagic将为我填充所有可用帽子的组合框。

但是如何为Person设计编辑表单?在这里,我想要一个带有所有可用Hats的组合框以及当前选择的Hat(如果不是null),将当前Hat作为默认选择。

我还没有和Cake合作过一段时间,所以我可能会遗漏一些明显的东西,或者是设计中的问题?

1 个答案:

答案 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'));