示例查询:
TableRegistry::getTableLocator()
->get('Parents')
->find()
->contain([
'Children' => function (Query $query) {
return $query->where([
'Children.code = Parent.code'
]);
}
])
Parent
和Children
表只有code
作为公用字段。
我如何定义它们的关联?
我如何包含未关联的实体?
答案 0 :(得分:0)
您可以在关联配置中自定义foreignKey
和bindingKey
在ParentsTable.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');
答案 1 :(得分:0)
您可以按照@kgbph的说明,通过ParentesTable定义这些表之间的关系。
尽管在您的示例中,我认为更好的解决方案是使用Cake的TreeBehavior。这是文档的link。