Cakephp find('list')从子模型中获取displayField

时间:2014-04-28 08:44:52

标签: cakephp

我有一个带有儿童模型的主模型。子模型具有链接到主模型ID的外键,遵循cakephp命名约定。子模型定义主模型中记录的名称/描述。

我尝试使用这些值(ID和名称)填充视图中的下拉列表框。但Cakephp查找(' list')通常只从一个模型中获取信息。

我该怎么做才能让我的查找('列表')检索2个字段,例如:

- child.master_id
- child.name

- master.id
- child.name (where child.master_id = master.id).

谢谢!

2 个答案:

答案 0 :(得分:1)

要更改find('list', $params)的键或值的字段,您可以使用键fields和要用作第二个参数的字段名称来处理数组。

在您的示例中,以下代码会将返回数组的键更改为child.master_id,将值更改为child.name

$childs = $this->Child->find('list', array(
    'fields' => array('Child.master_id', 'Child.name')
));

有关查找类型'list'的详细信息,请阅读cookbook

答案 1 :(得分:1)

只需定义字段

即可

对于问题中给出的示例,您只需在find调用中指定两个字段:

$result = $Child->find('list', array(
    'fields' => array('master_id', 'name')
));

当查找列表通过两个字段时,它们将用作结果数组的键和值。

如果确实需要返回不同模型的字段,则需要告诉cake进行连接。最简单的方法是指定递归值0(假设关系Child belongsTo Master已正确设置):

$sameResult = $Child->find('list', array(
    'fields' => array('Master.id', 'Child.name'),
    'recursive' => 0
));

请注意,在这种情况下,可能需要在字段列表中指定模型名称,以避免生成不明确的sql。