如何在 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'
            ]);
        }
    ])

ParentChildren 表只有 code 作为公共字段。

如何定义他们的关联?

如何收容不相关的实体?

您可以在关联配置中自定义foreignKeybindingKey

在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