首页 > 解决方案 > CakePHP 2.X - 关于 HasMany 关系的几个问题

问题描述

我在使用这个我必须管理的旧框架时遇到了一些问题。

我有这些表:

对于 GROUP -> MONITOR 关系,Cake 创建了一个名为 GROUP_MONITOR 的连接表。

这是组模型上的 HasMany 配置:

'Monitor' => array(
'className' => 'Monitor',
'joinTable' =>  'Groups_Monitors',
'foreignKey' => 'GroupId',
'associationForeignKey' => 'MonitorId',

问题 1:

我正在尝试使用所有相关监视器检索所有组。我找到了允许深入关系的递归键:

$all_groups  = $this->Group->find('all', array('recursive' => 1));

我收到了这个错误:

未找到列:1054 未知列“字段列表”中的“Monitor.GroupId””

似乎 Cake 没有使用“Groups_Monitors”表,而是在 Monitor 表中搜索 groupId;

问题2:

试图让组查询监视器,递归到 1 我正确地得到了所有组,但也得到了所有其他监视器的 HasMany 关系。

$all_monitors = $this->Monitor->find('all',array("recursive" => 1));

是否可以在 find 中排除一些 HasMany 关系以减少数据量?

标签: phpcakephp

解决方案


你说你有

GROUP -> HAS MANY -> MONITOR

“有很多”不使用连接表。这种关系的工作方式是“监视器”必须有一个引用组的外键。如果你想使用连接表,你应该使用“has and belongs to many”。

对于 Q2,使用可包含行为。您将能够详细指定要从数据库中获取的数据和模型。https://book.cakephp.org/2/en/core-libraries/behaviors/containable.html


推荐阅读