如何在 CakePHP 中包含不相关的实体?
How to contain unassociated entities in CakePHP?
示例查询:
TableRegistry::getTableLocator()
->get('Parents')
->find()
->contain([
'Children' => function (Query $query) {
return $query->where([
'Children.code = Parent.code'
]);
}
])
Parent
和 Children
表只有 code
作为公共字段。
如何定义他们的关联?
如何收容不相关的实体?
您可以在关联配置中自定义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');
您可以通过 ParentesTable 定义这些表之间的关系,正如@kgbph 所解释的那样。
虽然在你的例子中我认为更好的解决方案是使用 Cake 的 TreeBehavior。这是文档的 link。
示例查询:
TableRegistry::getTableLocator()
->get('Parents')
->find()
->contain([
'Children' => function (Query $query) {
return $query->where([
'Children.code = Parent.code'
]);
}
])
Parent
和 Children
表只有 code
作为公共字段。
如何定义他们的关联?
如何收容不相关的实体?
您可以在关联配置中自定义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');
您可以通过 ParentesTable 定义这些表之间的关系,正如@kgbph 所解释的那样。
虽然在你的例子中我认为更好的解决方案是使用 Cake 的 TreeBehavior。这是文档的 link。