使用模型而不是控制器来检查用户的数据是否已经存在


Using the Model instead of the Controller for checking if data already exists for a user

所以我写了一个标记注释的标记功能,我正在检查我的控制器,看看用户是否已经标记了特定的注释。问题是,我认为这可以在模型中完成。

功能是:

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');
}​

我的CommentsFlag当前模型将我的users表链接到它:

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

所以我想知道从现在开始我如何在模型中开始做这样的事情,因为我有很多这样的代码更适合模型。

拥有肥胖模型是一种很好的做法。在将上述函数移动到模型中时,您面临什么问题?

将这些函数复制到您的模型中(CommentsFlag),并用$this->find( 替换所有$this->CommentsFlag->find(...

因此,要从您的模型调用上述函数,您可以使用:

如果从CommentsFlag的控制器调用$this->CommentsFlag->userAlreadyFlagged()

或如果从用户控制器调用$this->User->CommentsFlag->userAlreadyFlagged()