cakephp3:包含与COUNT()关联的深度模型
我有以下相关的表对象:cakephp3:包含与COUNT()关联的深度模型,cakephp,orm,cakephp-3.0,Cakephp,Orm,Cakephp 3.0,我有以下相关的表对象: 设置稳定属于设置稳定 SettingsHeadersTable有许多SettingsTable SettingsOptionsTable属于stoSettingsTable SettingsTable有许多SettingsOptionsTable 例如: 标题为“常规站点设置” 该标题下有一个标题为“脱机状态”的设置 该设置下有3个选项,分别为“在线”、“离线” (限制)“开启”脱机(非限制) 我有一个控制器,我想找到所有的标题,包含这些标题下的所有设置,并进一步包含
设置稳定
属于设置稳定
SettingsHeadersTable
有许多SettingsTable
SettingsOptionsTable
属于stoSettingsTable
SettingsTable
有许多SettingsOptionsTable
例如:
- 标题为“常规站点设置”
- 该标题下有一个标题为“脱机状态”的设置
- 该设置下有3个选项,分别为“在线”、“离线” (限制)“开启”脱机(非限制)
$settings_headers = $this->Settings->SettingsHeaders->find()
->order([
'SettingsHeaders.number' => 'ASC'
])
->where([
'SettingsHeaders.module_id' => 1
])
->contain([
'Settings' => function ($q) {
return $q
->order(['Settings.number' => 'ASC'])
->where([
'Settings.hide' => 0
])
->contain([
'SettingsOptions' => function ($q) {
return $q
->order(['SettingsOptions.number' => 'ASC']);
}
]);
}
])
->toArray();
我做了一些调整,只在标题中显示了可见的设置以及相应的设置,但是选项没有显示。我对包含和匹配仍然很困惑。我不确定我写的代码是否是多余的,我一直在尝试遵循我在网上看到的例子
$settings_headers = $this->Settings->SettingsHeaders->find()
->order([
'SettingsHeaders.number' => 'ASC'
])
->where([
'SettingsHeaders.module_id' => 1
])
->select([
'SettingsHeaders.id',
'SettingsHeaders.title',
'SettingsHeaders.number',
'SettingsHeaders.module_id',
'settings_count' => 'COUNT(Settings.id)',
])
->select($this->Settings)
->group('SettingsHeaders.id')
->contain([
'Settings' => function ($q) {
return $q
->order(['Settings.number' => 'ASC'])
->where([
'Settings.hide' => 0 // ONLY SHOW VISIBLE SETTINGS
])
->contain([
'SettingsOptions' => function ($q) {
return $q
->order(['SettingsOptions.number' => 'ASC']);
}
]);
}
])
->matching('Settings', function($q) {
return $q->where([
'Settings.hide' => 0 // ONLY COUNT THE VISIBLE SETTINGS
]);
})
->toArray();
我不太清楚如何把它们放在一起(只显示带有可见选项的标题,还包含设置和设置选项中的所有数据)事实上,我刚刚解决了这个问题。我必须从第二个示例中删除以下行:
->select($this->Settings)