Ассоциации не загружаются при выборе полей

У меня возникли проблемы при попытке выбрать связанные модели при выборе полей. Моя версия CakePHP — 3.0beta2.

Три таблицы MYSQL, которые имеют отношение к этому вопросу:

users:
`id` int(11) NOT NULL,
`username` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`role` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
... (more information)

presets:
`id` int(11) NOT NULL,
`name` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
`user_id` int(11) NOT NULL,
... (more information)

favorites:
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`preset_id` int(11) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

Мои ассоциации определены как показано ниже:

// From FavoritesTable.php
public function initialize(array $config) {
$this->belongsTo('Users');
$this->belongsTo('Presets');
}

// From PresetsTable.php
public function initialize(array $config) {
$this->belongsTo('Users');
$this->hasMany('Favorites');
}

// From UsersTable.php
public function initialize(array $config) {
$this->hasMany('Presets');
$this->hasMany('Favorites');
}

То, что я пытаюсь достичь, это:

  1. Загрузить всю информацию о пользователе для текущего пользователя
  2. Загрузить все избранное, которые есть у этого пользователя
  3. Создайте новое поле, которое преобразует created поле (отметка времени) в дату
  4. Для каждого избранного загрузите соответствующие предустановленные данные

Это код, который я использую для этого:

// From UsersController.php
public function favorites() {

$userId = $this->Auth->user('id');

$user = $this->Users->find('all')
->where(['id' => $userId])
->contain([
'Favorites' => function($q) {
return $q
->select(['id', 'preset_id', 'user_id', 'created', 'date' => 'DATE(created)'])
->order(['Favorites.created' => 'DESC']);
},
'Favorites.Presets',
])
->first();

$this->set('user', $user);
}

Проблема в том, что когда я использую select метод, как в приведенном выше коде, Favorites.Presets ассоциация не загружена, поэтому $user['favorites'][0]['preset'] всегда null,

Но если я закомментирую метод выбора (таким образом, выбирая все поля и не получая DATE(created), ассоциация загружена, и я могу получить доступ к информации из таблицы предустановок.

Может ли это быть ошибкой или я что-то не так делаю?
Спасибо за помощь!

0

Решение

Я думаю, вам нужно позвонить ->autoFields(true) после select(), Это необходимо, если вы ожидаете, что будут выбраны все остальные поля. Возможно, это можно рассматривать как ошибку, попробуйте открыть тикет в github.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector