Использование модели вместо контроллера для проверки, существуют ли данные для пользователя - PullRequest
0 голосов
/ 17 марта 2012

Итак, я написал функцию флажка для пометки комментариев, и я проверяю в своем контроллере, чтобы убедиться, что пользователь уже пометил определенный комментарий. Проблема, я думаю, это можно сделать в модели.

Функция:

private function userAlreadyFlagged($userId, $commentId) {
    $userAlreadyFlagged = $this->CommentsFlag->find('count', array(
        'conditions' => array('CommentsFlag.comment_id' => $commentId, 'CommentsFlag.user_id' => $userId)
            ));

    if ($userAlreadyFlagged > 0) {
        return true;
    } else {
        return false;
    }
}

Тогда у меня есть еще одна функция внутри контроллера, которая называется flagComment

.
if (!$this->userAlreadyFlagged($userId, $commentId)) {
    if ($this->CommentsFlag->save($this->request->data)) {
        $message = array('response' => 'success');
    }
} else {
    $message = array('response' => 'alreadyFlagged');
}​

Моя модель для текущих комментариевFlag связывает мою таблицу users с ней:

var $name = 'CommentsFlag';
var $belongsTo = array(
    'User' => array(
        'className' => 'User'
    )
);

Так что мне интересно, как теперь я могу начать делать подобные вещи в модели, потому что у меня много такого кода, который лучше подходил бы для Модели.

1 Ответ

1 голос
/ 17 марта 2012

Полезно иметь толстые модели.С какой проблемой вы сталкиваетесь при перемещении вышеуказанных функций в модель?

Скопируйте эти функции в вашу модель (CommentsFlag) и замените все $this->CommentsFlag->find(... на $this->find(

Следовательно, чтобы вызвать вышеуказанные функциив вашей модели вы можете использовать:

$this->CommentsFlag->userAlreadyFlagged() при вызове из контроллера CommentsFlag

или $this->User->CommentsFlag->userAlreadyFlagged() при вызове из контроллера пользователя.

...