0

モデル名の画像とコメントが2つあります。ここでの関係は、画像に多くのコメントがあるようなものです。今、私のリストページに、すべてのimaeの詳細と、その画像のコメントなしのみを表示したいと思います。どうすればいいのか教えてもらえますか?クエリを書き込んだ後、返されるデータは

Array
(

    [0] => Array
        (
            [Image] => Array
                (
                    [image_id] => 57
                    [user_id] => 1
                    [category_id] => 22
                    [image_title] => scroul
                    [description] => beutifull natural image for the animal
                    [keyword] => scrual
                    [image_price] => 
                    [image_name] => 7bf4a72509da5906903c84e88228b9dd.jpg
                    [image_path] => img/uploads/images/original/
                    [image_available_size] => 
                    [like] => 12
                    [size] => 3244
                    [resolution] => 2162 x 1644
                    [i_date] => 1348573022
                    [i_by] => 1
                    [u_date] => 1348573022
                    [u_by] => 1
                    [is_active] => Y
                    [is_deleted] => N
                )

            [Comment] => Array
                (
                    [0] => Array
                        (
                            [comment_id] => 5
                            [image_id] => 57
                            [user_id] => 2
                            [comment] => socute
                            [comment_date] => 1348739230
                            [is_active] => N
                            [is_deleted] => N
                        )

                )

        )

    [1] => Array
        (
            [Image] => Array
                (
                    [image_id] => 56
                    [user_id] => 1
                    [category_id] => 22
                    [image_title] => cute dog
                    [description] => cute dog looking 
                    [keyword] => 
                    [image_price] => 
                    [image_name] => d4af899b0d52cccbec94952a3abd0077.jpg
                    [image_path] => img/uploads/images/original/
                    [image_available_size] => 
                    [like] => 8
                    [size] => 620
                    [resolution] => 2592 x 1944
                    [i_date] => 1348572897
                    [i_by] => 1
                    [u_date] => 1348572897
                    [u_by] => 1
                    [is_active] => Y
                    [is_deleted] => N
                )

            [Comment] => Array
                (
                    [0] => Array
                        (
                            [comment_id] => 3
                            [image_id] => 56
                            [user_id] => 2
                            [comment] => ohhhhhhh
                            [comment_date] => 1348737968
                            [is_active] => N
                            [is_deleted] => N
                        )

                )

        )

    [3] => Array
        (
            [Image] => Array
                (
                    [image_id] => 55
                    [user_id] => 1
                    [category_id] => 22
                    [image_title] => ships
                    [description] => ships with beutiful green background
                    [keyword] => ship,green,animal,nature,background,eating,white ship
                    [image_price] => 
                    [image_name] => c0dfc2432ae047e9160f3ef99880fe87.jpg
                    [image_path] => img/uploads/images/original/
                    [image_available_size] => 
                    [like] => 1
                    [size] => 1831
                    [resolution] => 2520 x 1944
                    [i_date] => 1348572846
                    [i_by] => 1
                    [u_date] => 1348661976
                    [u_by] => 1
                    [is_active] => Y
                    [is_deleted] => N
                )

            [Comment] => Array
                (
                    [0] => Array
                        (
                            [comment_id] => 2
                            [image_id] => 55
                            [user_id] => 2
                            [comment] =>  i like it
                            [comment_date] => 1348737942
                            [is_active] => Y
                            [is_deleted] => N
                        )

                    [1] => Array
                        (
                            [comment_id] => 4
                            [image_id] => 55
                            [user_id] => 2
                            [comment] =>  good scene
                            [comment_date] => 1348738004
                            [is_active] => N
                            [is_deleted] => N
                        )
                )
        )
)

上記の配列には、その画像のすべてのコメントがあります。ここにコメントリストは必要ありません。コメントは必要ありません。

4

2 に答える 2

1

Cake は、もう 1 つの驚くべき魔法、「counterCache」を提供します。

Comments モデルで counterCache を定義できます

public $belongsTo = array(
    'className' => 'Image',
    'foreignKey' => <your_foreign_key>,
    ...
    ...
    'counterCache' => true

);

次に、フィールド「comment_count」をイメージ テーブル (またはモデル イメージで使用されているテーブル) に追加すると、ケーキが残りの作業を行います。

これにより、コメントが追加/削除されるたびにオーバーヘッドが追加されますが、画像データを取得するたびに「カウント」を発行するよりもはるかに優れた代替手段です。

詳細については、クックブックを確認してください。そこにある「counterCache」に注意してください。

アップデート:

カウンター キャッシュのスコープを制限するには、追加の属性「counterScope」を次のように使用します。

public $belongsTo = array(
    'className' => 'Image',
    'foreignKey' => <your_foreign_key>,
    ...
    ...
    'counterCache' => true,
    'counterScope' => array('Image.active' => 1)

);
于 2012-09-28T18:38:59.683 に答える
1

使用している検索ステートメントを投稿できますか。ドキュメントから、再帰を特定のレベルに設定できます。

  • -1 Cake はグループデータのみを取得し、結合は行いません。
  • 0 Cake はグループデータとそのドメインを取得します
  • 1 Cake は、グループ、そのドメイン、および関連するユーザーを取得します
  • 2 Cake は、グループ、そのドメイン、関連するユーザー、およびユーザーに関連する記事を取得します

したがって、現在のモデルからのデータのみが必要な場合は、次のように呼び出すことができます。

$this->Model->find('all', array('recursive' => -1));

を呼び出すときにどのモデル データを取得するかを指定できるContainable動作もありますfind

hasManyImageという Post モデルがあるとします。Post Model の Containable 動作が適切に含まれている呼び出しは、次のようになります。

$this->Post->find('all', array(
 'conditions' => array('Post.id' => 1),
 'contain' => array('Image')
));

編集: つづりと書式設定のため、最初の質問を読み違えました。データ配列に「コメントなし」を表示したいのではなく、 「コメント数」のみを表示したいと思っていました。

コメント数が必要な場合は、Kishor Kundan が提案するようにcounterCacheを使用してください。

于 2012-09-27T15:38:31.677 に答える