Как передать несколько идентификаторов моделей в комментарии добавить действие в CakePHP? - PullRequest
4 голосов
/ 16 февраля 2010

Мой вопрос касается того, как я могу использовать один контроллер комментариев с несколькими контроллерами «принадлежит».

Я хочу добавлять комментарии к новостям, сообщениям и матчам (это теннисный сайт). У меня есть комментарии, добавьте настройку действия для использования помощника 'ajax', и я также использую counterCache, чтобы отслеживать количество комментариев для каждой новости, публикации и матча.

Чего я не знаю, так это как передать уникальный идентификатор (новости, записи, совпадения) в действие добавления контроллера комментариев, чтобы форма сохранила комментарий и news_id, post_id или match_id, в зависимости от того, что передается в форме.

Что я думаю, так это то, что форма настроена для сбора уникального идентификатора таким образом, чтобы передаваемое сообщение было специфичным для этого контроллера (новости, публикации, совпадения). В результате действие add добавляет комментарий вместе со значением идентификатора новости / записи / совпадения.

В противном случае мне пришлось бы настроить контроллер post_comments, news_comments и match_comments для обработки каждого из них, и это не было бы подходом DRY , который мне нужен.

Я все еще строю свои знания и понимание CakePHP . Как я могу достичь того, что я намеревался сделать?

1 Ответ

2 голосов
/ 16 февраля 2010

Ваша таблица базы данных комментариев должна выглядеть так:

id | belongs_to | foreign_id | ....
-------------------------------------
   |            |            |

belongs_to равно либо enum, либо varchar

Тогда в вашей модели вы можете связать модель комментария следующим образом в комментарии модель:

var $belongsTo = array(
  'News' => array(
    'className' => 'News',
    'foreignKey' => 'foreign_id',
    'conditions' => array('Comment.belongs_to'=>'News'),
    'fields' => '',
    'order' => ''
  ),
  'Post' => array(
    'className' => 'Post',
    'foreignKey' => 'foreign_id',
    'conditions' => array('Comment.belongs_to'=>'Post'),
    'fields' => '',
    'order' => ''
  )
);

А в пост-модели:

var $hasMany = array(
  'Comment' => array(
    'className' => 'Comment',
    'foreignKey' => 'foreign_id',
    'dependent' => true,
    'conditions' => array('Comment.belongs_to' => 'Post'),
    'fields' => '',
    'order' => 'Comment.created DESC',
    'limit' => '',
    'offset' => '',
    'exclusive' => '',
    'finderQuery' => '',
    'counterQuery' => ''
  )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...