【问题标题】:Cakephp find('list') to get displayField from child modelCakephp find('list') 从子模型中获取 displayField
【发布时间】:2014-04-28 08:44:51
【问题描述】:

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

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

我该怎么做才能让我的 find('list') 检索 2 个字段,例如:

- child.master_id
- child.name

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

谢谢!

【问题讨论】:

  • 主子关系是什么?主人属于孩子吗?只有这样才能使它成为可能。顺便说一句,你不应该编造名字——如果你不在这里发明名字,你会更容易关注你。如果您将其抽象太多,它还会增加潜入的错误变化。 PS:您应该始终提及您正在使用的确切 cakephp 版本。

标签: cakephp


【解决方案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

【讨论】:

    【解决方案2】:

    只需定义字段

    对于问题中给出的示例,您只需在 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      相关资源
      最近更新 更多