Как содержать несвязанные сущности в CakePHP? - PullRequest
0 голосов
/ 06 июня 2019

Пример запроса:

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

Parent и Children имеют только code в качестве общего поля.

Как мне определить их ассоциацию?

Как содержать несвязанные сущности?

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Вы можете определить отношения между этими таблицами через ParentesTable, как объяснил @kgbph.

Хотя в вашем примере я думаю, что лучшим решением будет использование TreeBehavior Cake.Вот ссылка на документацию.

0 голосов
/ 06 июня 2019

Вы можете настроить 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');
...