如何在CakePHP中包含未关联的实体?

时间:2019-06-06 07:06:47

标签: php cakephp cakephp-3.0

示例查询:

TableRegistry::getTableLocator()
    ->get('Parents')
    ->find()
    ->contain([
        'Children' => function (Query $query) {
            return $query->where([
                'Children.code = Parent.code'
            ]);
        }
    ])

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

我如何定义它们的关联?

我如何包含未关联的实体?

2 个答案:

答案 0 :(得分:0)

您可以在关联配置中自定义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');

答案 1 :(得分:0)

您可以按照@kgbph的说明,通过ParentesTable定义这些表之间的关系。

尽管在您的示例中,我认为更好的解决方案是使用Cake的TreeBehavior。这是文档的link