Опять же, я хочу задать вам вопрос о CakePHP: у меня есть 2 модели пользователя и комментарий с отношением 1-n (один пользователь имеет много комментариев). Я хочу использовать find () для отображения информации как пользователя, так и его комментариев с возвратом данных формата:
Array
(
[User] => Array
(
[id] => 121
[name] => Gwoo the Kungwoo
[created] => 2007-05-01 10:31:01
)
[Comment] => Array
(
[0] => Array
(
[id] => 123
[user_id] => 121
[title] => On Gwoo the Kungwoo
[body] => The Kungwooness is not so Gwooish
[created] => 2006-05-01 10:31:01
)
[1] => Array
(
[id] => 124
[user_id] => 121
[title] => More on Gwoo
[body] => But what of the 'Nut?
[created] => 2006-05-01 10:41:01
)
)
)
Но я не хочу настраивать отношения hasMany в модели User как пример в ссылке: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html. Я попробовал этот код:
$data = $this->User->find('all', array(
'joins' => array(
array(
'table' => 'comment',
'alias' => 'Comment',
'type' => 'LEFT',
'conditions' => array(
'User.id = Comment.user_id'
)
),
'conditions' => array(
'User.id' => $userId
),
'fields' => array('User.*', 'Comment.*')
));
И Cake возвращает массив с дубликатом записи пользователя (например, если у пользователя есть 2 комментария, он возвращает 2 записи дубликата пользователя).
Кто-нибудь может дать мне другое решение для этого? (но кроме решения, что конфиг имеет много моделей отношений), спасибо.
В качестве альтернативы вы можете использовать bindModel в вашем контроллере
$this->User->bindModel(
array(
'hasMany'=>array(
'Comment' =>array(
'className' => 'Comment',
'foreignKey' => 'user_id',
'conditions' => array('Comment.status' => 'Active'),
)
)
)
);
$data = $this->User->find('all',array('conditions'=>array('User.email'=>$userEmail)));
Для большего Информация
ОБНОВЛЕНО
Посмотри на это ответ для получения дополнительной информации см. подробности о модели привязки и отмены через это ссылка на сайт
Других решений пока нет …