CakePHP, HasMany Отношения - PullRequest
       6

CakePHP, HasMany Отношения

1 голос
/ 30 августа 2010

Возможно ли как-нибудь создать отношение hasMany, которое использует идентификатор вне Модели? Например, у одного пользователя много комментариев, но я хотел бы найти только комментарии вошедшего в систему пользователя:

public $hasMany = array(
    'MyComment' => array(
            'className' => 'Comment',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => array('Comment.user_id' => $loggedinUser_id),
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
);

Я думал о передаче $ loggedinUser_id в контроллеры beforeFilter () в модель. Это хороший способ решить эту проблему или есть лучшие способы?

Любое предложение приветствуется. Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 30 августа 2010

Я бы посоветовал следовать образу мышления «толстая модель, скинни-контроллер».Я бы построил функцию в модели с именем: user_only_comments (или что-то, что имело бы смысл для вас).

// in the comment model
function user_only_comments($id) {
   return $this->find('all', array('conditions' => array('Comment.user_id' => $id)));
}

Затем в контроллере вы просто вызываете:Вы готовы к работе, и ваш контроллер не только хорош и чист, но вы можете вызывать этот метод для конкретной модели где угодно, без необходимости каждый раз писать условия.Если условия меняются, вы можете изменить его в одном месте, а не везде в контроллере, в котором вы устанавливаете условие.

0 голосов
/ 30 августа 2010

Вы всегда и только захотите получить доступ к комментариям пользователя? Разве вы не хотите показывать комментарии других людей в какой-то момент времени?

Я бы посоветовал вам установить это в качестве условия при каждом вызове Model :: find () из вашего контроллера.

Кроме того, в зависимости от конкретных типов отношений, вам может понадобиться использовать поведение Containable для фильтрации на основе связанных критериев модели (обычно для HABTM, а не HM).

...