1

所以我将我的两个模型链接在一起,它返回的内容如下:

Array
(
    [Submission] => Array
        (
            [id] => 47
            [user_id] => 0
            [title] => asdfasdfsa dfasdf asdfa sfa fadf
            [source] => http://www.aol.com
            [slug] => 
            [category] => health
            [created] => 2012-06-25 11:30:16
        )

    [User] => Array
        (
            [id] => 2
            [username] => john
        )

    [SubmissionsVote] => Array
        (
            [0] => Array
                (
                    [id] => 247
                    [user_id] => 2
                    [submission_id] => 47
                    [vote_type] => up
                )

        )

)

但是,有时投票数会在 [0] - [n] 之间。这是给我的$newestSubmissions。我正在做的查询是:

public function newestSubmissions() {
    $this->unBindModel(
            array('hasMany' => array('Comment')));
    return $this->find('all', array(
                'fields' => array(
                    'Submission.id',
                    'Submission.user_id',
                    'Submission.title',
                    'Submission.source',
                    'Submission.slug',
                    'Submission.category',
                    'Submission.created',
                    'User.id',
                    'User.username'
                ),
                'order' => 'Submission.created DESC'
            ));
}

我想要做的是检索整个$newestSubmissions数组对象的所有投票以及每个投票的所有投票(下面的查询)$newestSubmissions以计算实际分数,这样我就可以将调用的单个数组对象发送$newestSubmissions到我的视图,而不是的$newestSubmissions$submissionScore

public function getVoteType($userId, $submissionId) {
    $voteType = $this->find('all', array(
        'conditions' => array(
            'User.id' => $userId,
            'Submission.id' => $submissionId),
        'fields' => array(
            'SubmissionsVote.vote_type'),
        'limit' => '1'
            ));
    return $voteType[0]['SubmissionsVote']['vote_type'];
}

基本上我想将一个分数连同数组对象中的所有其他信息一起发送到我的视图,而不是必须在我的父数组对象中发送一个内部索引数组对象(这是我目前得到的)。

我怎样才能做到这一点?

4

2 回答 2

0

好的...我试图将其发布为评论,但它太长了。这不是一个真正的答案。

你知道可包含的行为吗?检查一下 - 这有助于确定您返回的数据:http: //book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

此外,如果您要将您的提交投票表分成两个表 - 赞成票和反对票,那么您还可以使用 Cake 的 counterCache 行为直接在您的“提交”表中跟踪赞成/反对票的数量(您需要将 upvote_count 和 downvote_count 列添加到您的提交表中)。

这将使计算提交分数更容易——而且您不必每次都从数据库中获取所有选票。对于 doco,请在此页面上搜索 counterCache:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html可能值得考虑。

于 2012-08-11T08:36:41.730 回答
0
  return $this->find('all', array(
                'fields' => array(
                    'Submission.id',
                    'Submission.user_id',
                    'Submission.title',
                    'Submission.source',
                    'Submission.slug',
                    'Submission.category',
                    'Submission.created',
                    'User.id',
                    'User.username',
                    'submissionsvotes.vote_type'
                ),
                'joins' => array(
                            array(
                            'table' => 'SubmissionsVote',
                            'alias' => 'submissionsvotes',
                            'type' => 'LEFT', 
                            'conditions' => array
                            ('User.id = SubmissionsVotes.user_id','Submission.id'=>'SubmissionsVotes.submission_id')
                            ),
                        )


               'group'=>'submissionsvotes.vote_type',
               'order' => 'Submission.created DESC'
            )
    );
于 2012-08-11T09:17:01.003 回答