2010-08-30 1 views
1

Возможно ли создать hasMany Relationship, которое использует ID за пределами модели? Например один пользователь имеет много комментариев, но я хотел бы найти только комментарии зарегистрированного пользователя:CakePHP, HasMany Relationship

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 контроллеров() модель. Это хороший способ решить эту проблему или есть ли лучшие способы?

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

+0

Я получил очень хороший ответ на этот вопрос здесь: http://stackoverflow.com/questions/3619891/hasmany-relationship-and-id-from-other-model-in-cakephp – chris

ответ

0

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

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

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

+0

Спасибо за ответ и извините за мое плохое объяснение. Пожалуйста, см. Мой комментарий на @cdburgess ответ. – chris

2

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

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

Затем в контроллере, вы просто звоните:

$user_comments = $this->Comment->user_only_comments($user_id); 

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

+0

Хорошо, мои объяснения были очень плохими, извините за это. Я хочу получить все комментарии, и каждый комментарий имеет много «понравлений» от разных пользователей. Теперь мне нужно знать, понравился ли зарегистрированный пользователь комментарий. Вот почему я хотел бы создать особую Относящуюся в Модели, которая просто говорит мне, если вошедшему пользователю пользователю понравился комментарий. – chris