У меня есть следующий класс и связанная структура базы данных
class OrganisationAccount
belongsTo Account
belongsTo Organisation
class Account
hasOne User
class Organisation
belongsTo Account
class User
belongsTo Account
Затем я выполняю поиск всех с использованием CakePHP find со следующей настройкой —
$OrganisationAccount->Behaviors->load('Containable');
$records = $OrganisationAccount->find(
'all',[
'fields'=>[
$OrganisationAccount->name.'.status',
'Account.email_address',
'Account.last_login',
],
'conditions'=>[
$OrganisationAccount->name.'.organisation_id'=>57
],
'contain'=>[
'Account'=>[
'User'
]
]
]
);
Теперь, если я выполню поиск, используя приведенное выше, я получу следующий результат —
Array
(
[0] => Array
(
[OrganisationAccount] => Array
(
[status] => REGISTERED
)
[Account] => Array
(
[email_address] => [email protected]
[last_login] => 2019-01-13 20:13:18
[id] => 44
[User] => Array
(
[id] => 32
[uuid] => 5c3814fc-2868-423f-9242-45b4cbdd56cb
[created] => 2019-01-11 04:01:00
[modified] => 2019-01-11 04:01:00
[account_id] => 44
[first_name] => John
[last_name] => Individual
[gender] => Not specified
[date_of_birth] =>
[display_picture] =>
[mobile] =>
[full_name] => John Individual
)
)
)
)
Что я и ожидаю.
Но если я поставлю поля Account над полями OrganisationAccount в массиве полей в поиске,
$OrganisationAccount->Behaviors->load('Containable');
$records = $OrganisationAccount->find(
'all',[
'fields'=>[
'Account.email_address',
'Account.last_login',
$OrganisationAccount->name.'.status'
],
'conditions'=>[
$OrganisationAccount->name.'.organisation_id'=>57
],
'contain'=>[
'Account'=>[
'User'
]
]
]
);
Я получаю следующий результат —
Array
(
[0] => Array
(
[Account] => Array
(
[email_address] => [email protected]
[last_login] => 2019-01-13 20:13:18
[id] => 44
[Account] => Array
(
[email_address] => [email protected]
[last_login] => 2019-01-13 20:13:18
[id] => 44
[User] => Array
(
[id] => 32
[uuid] => 5c3814fc-2868-423f-9242-45b4cbdd56cb
[created] => 2019-01-11 04:01:00
[modified] => 2019-01-11 04:01:00
[account_id] => 44
[first_name] => John
[last_name] => Individual
[gender] => Not specified
[date_of_birth] =>
[display_picture] =>
[mobile] =>
[full_name] => John Individual
)
)
)
[OrganisationAccount] => Array
(
[status] => REGISTERED
)
)
)
Как видите, запись имеет индекс Account внутри индекса Account, который отличается от предыдущего результата, хотя массив полей содержал ту же конфигурацию.
Массив find генерируется автоматически.
Это ошибка в CakePHP или я что-то делаю неправильно? Любая помощь приветствуется.
Если у вас есть много ко многим отношениям OrganizationAccount
между Organizations
а также Accounts
, затем Organization belongsTo Account
портит manyToMany
,
Других решений пока нет …