0

我有两个具有一对一关系的模型,例如 Person 和 Hat。外键在 Person 中,因此 Person 属于 Hat 并且 Hat hasOne Person。

现在在 Person 的创建表单中,我可以使用自定义 find() 来查找所有尚未使用的 Hats,并且 automagic 将为我填充一个包含所有可用 Hats 的组合框。

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

我已经有一段时间没有使用 Cake 了,所以我可能遗漏了一些明显的东西,或者是设计中的问题?

4

1 回答 1

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'));
于 2013-07-05T04:11:10.207 回答