почта имеет пользователя (принадлежит), а у пользователя есть профиль (hasOne). Обычно все работает: я могу получить доступ от Почты к Пользователю и от пользователя к профилю.Cakephp: ассоциации ассоциаций в «полях»
Из почты все работает с использованием общего поиска. В результате более или менее это (я удалил некоторые ключи, только для примера):
array(
'Post' => array(
'id' => '1',
'category_id' => '1',
'user_id' => '1',
'title' => 'Example',
'text' => '',
),
'User' => array(
'password' => '*****',
'id' => '1',
'group_id' => '1',
'username' => 'mirko',
'status' => 'active',
'Profile' => array(
'id' => '1',
'user_id' => '1',
'first_name' => 'Mirko',
'last_name' => 'Pagliai',
),
)
)
Проблема возникает, когда я использую «поля», когда я хочу, чтобы извлечь лишь несколько полей. Например, это работает:
'fields' => array('id', 'title', 'User.id')
и результат:
array(
'Post' => array(
'id' => '1',
'title' => 'Articolo di prova :-)'
),
'User' => array(
'id' => '1'
)
)
Но я не понимаю, всегда используя "поля", как получить доступ к Profile. Эти don'yt работы:
'fields' => array('id', 'title', 'User.id', 'Profile.id')
'fields' => array('id', 'title', 'User.id', 'User.Profile.id')
Я всегда получаю эту ошибку "Error: SQLSTATE [42S22]: Column не найдено: 1054 Unknown столбца 'User.Profile.id' в 'списке полей'".
Что случилось? Благодарю.
EDIT: Я не использую Контейнерное поведение. Может, это проблема? В этом случае важно?
Например, при использовании: разбивать на страницы
$this->paginate = array(
'conditions' => $conditions,
'fields' => array('id', 'title', 'User.id', 'Profile.id'),
'limit' => 10,
'recursive' => 2,
);
EDIT2: благодаря @Hoff, я близок к разгадке. Но есть еще что-то не так (и Containable очень полезно!). В AppModel.php я добавил:
...
class AppModel extends Model {
public $actsAs = array('Containable');
public $recursive = -1;
...
Но это не работает:
$this->paginate = array(
'conditions' => $conditions,
'contain' => array(
'User' => array(
'fields' => array('id'),
'Profile' => array(
'fields' => array('id', 'full_name'),
),
),
'Category' => array(
'fields' => 'title',
),
),
'fields' => array('id', 'user_id', 'category_id', 'title', 'created', 'modified', 'published'),
'limit' => 10,
);
Потому что я получаю:
array(
(int) 0 => array(
'Post' => array(
'id' => '1',
'user_id' => '1',
'category_id' => '1',
'title' => 'Articolo di prova :-)',
'created' => '2012-06-21 18:46:00',
'modified' => '0000-00-00 00:00:00',
'published' => true
),
'Category' => array(
'title' => 'prova',
'id' => '1'
),
'User' => array(
'id' => '1'
)
)
)
, но если добавить любое поле для пользователя (по электронной почте , имя пользователя, пароль и т. д.), это работает:
'User' => array(
'fields' => array('id', 'username'),
'Profile' => array(
'fields' => array('id', 'full_name'),
),
),
И я получаю:
array(
(int) 0 => array(
'Post' => array(
'id' => '1',
'user_id' => '1',
'category_id' => '1',
'title' => 'Articolo di prova :-)',
'created' => '2012-06-21 18:46:00',
'modified' => '0000-00-00 00:00:00',
'published' => true
),
'Category' => array(
'title' => 'prova',
'id' => '1'
),
'User' => array(
'id' => '1',
'username' => 'mirko',
'Profile' => array(
'id' => '1',
'full_name' => 'Mirko Pagliai'
)
)
)
)
Могу ли я увидеть ваш найти вызов? Кроме того, используете ли вы поведение Containable? – Hoff
Я ответил, отредактировав первое сообщение –