示例查询:
TableRegistry::getTableLocator()
->get('Parents')
->find()
->contain([
'Children' => function (Query $query) {
return $query->where([
'Children.code = Parent.code'
]);
}
])
Parent
表和Children
表仅将code
作为公共字段。
如何定义它们的关联?
如何包含未关联的实体?
您可以在关联配置中自定义foreignKey
和bindingKey
在家长表中.php:
$this->hasMany('Children', [
'bindingKey' => 'code',
'foreignKey' => 'code'
]);
此配置将设置关联实体时要查找的字段。
然后,您可以像这样关联控制器上的实体:
// This query will contain children where Children.code === Parent.code
TableRegistry::getTableLocator()
->get('Parents')
->find()
->contain('Children');
您可以按照@kgbph说明通过 ParentesTable 定义这些表之间的关系。
尽管在您的示例中,我认为更好的解决方案是使用Cake的树行为。这是文档的链接。