0

ビューに渡す配列があり、複数のテーブルで結合されています。この配列を呼びましょうSubmissions。すべてにssubmissionsが含まれてSubmissionVoteおり、一般的なデータsubmissionオブジェクトは次のようになります。

 [1] => Array
        (
            [Submission] => Array
                (
                    [user_id] => 17
                    [title] => Yo mama so fat when she went to the movies she sat next to everyone
                    [source] => http://www.ahajokes.com/ym01.html
                    [slug] => yo-mama-so-fat-when-she-went-to-the-movies-she-sat-next
                    [category] => funny
                    [created] => 2012-09-26 21:00:35
                    [id] => 104
                )

            [User] => Array
                (
                    [id] => 17
                    [username] => bob_cobb
                )

            [SubmissionsVote] => Array
                (
                    [0] => Array
                        (
                            [id] => 323
                            [user_id] => 2
                            [submission_id] => 104
                            [vote_type] => up
                            [when] => 0000-00-00 00:00:00
                            [voted_ip] => 842844107
                        )

                    [1] => Array
                        (
                            [id] => 322
                            [user_id] => 17
                            [submission_id] => 104
                            [vote_type] => up
                            [when] => 0000-00-00 00:00:00
                            [voted_ip] => 1163843117
                        )

                )

            [SubmissionThumbnails] => Array
                (
                    [0] => Array
                        (
                            [id] => 6
                            [submission_id] => 104
                            [original] => http://www.ahajokes.com/g/smlogo.gif
                            [extension] => jpg
                            [slug] => http://www.ahajokes.com/g/smlogo.gif
                        )

                )

        )

今、私は自分の見解でこれを実行し、それから他の有用なものをforeachつかん$submission['Submission']['id']でいます。これはすべて問題ありませんが、どういうわけか、上と下の数が/のようになるように$submission['Submission']['category']、新しいオブジェクト(または同様に直感的なもの)を作成できるようにしたいと思います。vote_typevote_type$submission['Submission']['upVotes']$submission['Submission']['downVotes']

私はCakePHPで結合を行っており、これが私のクエリです:

        $this->find('all', array(
                'fields' => array(
                    'Submission.user_id',
                    'Submission.title',
                    'Submission.source',
                    'Submission.slug',
                    'Submission.category',
                    'Submission.created',
                    'User.id',
                    'User.username'),
                'order' => 'Submission.created DESC'));

私がこれをやりたい唯一の理由は、私の見解の中ですべての賛成票と反対票を通過して合計しなければならないことは、かなりずさんなことは言うまでもなく、かなりの苦痛になるからです。

どうすればこれを改善できますか?

4

1 に答える 1

0

仮想フィールドを使用してみることができます:http ://book.cakephp.org/2.0/en/models/virtual-fields.html

Submissionモデルには、次のようなものがあります。

public $virtualFields = array(
    'up_count' => 'SELECT COUNT(*) FROM submission_votes AS up_count WHERE submission_id = Submission.id AND vote_type = "up"',
    'down_count' => 'SELECT COUNT(*) FROM submission_votes AS down_count WHERE submission_id = Submission.id AND vote_type="down"',
);

上記の例でsubmission_votesは、はモデルのデータベーステーブル名ですSubmissionVote。警告に注意してください:http://book.cakephp.org/2.0/en/models/virtual-fields.html#limitations-of-virtualfields

データ配列を操作したいだけの場合は、別のオプションHashとして、クラスの何かを使用することもできますHash::reduce

http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html#Hash::reduce

于 2012-09-28T07:05:50.927 に答える