2011-08-02 16 views
0

私は現在、私の最初のCakePHPサイトを書いています。私はイメージギャラリーで働いています。私は、フロントページ上のアルバムあたりの画像数を持っていたいと思います。CakePHP - Album-paginateでアルバムごとに画像を数えるにはどうしたらいいですか? (Image belongsTo Album)

モデル:

<?php 
class Album extends AppModel { 
     var $name = 'Album'; 
     var $displayField = 'name'; 

     var $belongsTo = array(
       'ParentAlbum' => array(
         'className' => 'Album', 
         'counterCache' => true, 
         'foreignKey' => 'parent_id' 
       ) 
     ); 

     var $hasMany = array(
       'ChildAlbum' => array(
         'className' => 'Album', 
         'foreignKey' => 'parent_id', 
         'dependent' => false 
       ), 
       'Image' => array(
         'className' => 'Image', 
         'foreignKey' => 'album_id', 
         'dependent' => false 
       ) 
     ); 
} 

<?php 
class Image extends AppModel { 
     var $name = 'Image'; 
     var $displayField = 'Name'; 
     var $belongsTo = array(
       'Album' => array(
         'className' => 'Album', 
         'counterCache' => true 
       ) 
     ); 
} 

コントローラー:

[[email protected] public_html]# cat controllers/albums_controller.php 
<?php 
class AlbumsController extends AppController { 

     var $name = 'Albums'; 

     var $paginate = array(
     'limit' => 95, 
     'order' => array(
     'Album.name' => 'asc') 
     ); 

     function index() { 
       $this->Album->recursive = 0; 
       $this->set('albums', $this->paginate()); 
       $this->set("title_for_layout","CakeGal"); 
     } 

     function view($id = null) { 
       if (!$id) { 
         $this->Session->setFlash(__('Invalid album', true)); 
         $this->redirect(array('action' => 'index')); 
       } 
       $this->set('album', $this->Album->read(null, $id)); 
       $this->set("title_for_layout", $this->Album->data['Album']['name']); 
     } 
} 

ビュー:

[[email protected] public_html]# cat views/albums/index.ctp 
<?php foreach ($albums as $album): ?> 
<li class="thumbnail" style="width: 164px; margin-left: 26px;"> 
<a class="collection-image-link" href="/albums/view/<?php echo $album['Album']['id']; ?> 
"><img class="photos" src="/thumbs/<?php echo $album['Album']['id']; ?>.jpg" title="" alt="" /></a> 
<h2><a href="/albums/view/<?php echo $album['Album']['id']; ?>"><?php echo $album['Album']['name']; ?></a></h2> 
<p class="album-meta">Contains <?php echo $album_count; ?> pictures</p> 
</li><!-- end .album --> 
<?php endforeach; ?> 

一般的アドバイスもWELだろう来て!それは私の最初のCakePHPプロジェクトの後であり、初めてcakephpに関するフォーラムで助けを求めています。私はアルバムの数を数えることができますが、1アルバムあたりの画像数を数え、$ album_countとして投稿したいと思います。

答えて

3

ImageとAlbumの間の外部キーはparent_albumではなくalbum_idである必要があります。データベースのフィールド名を変更する必要があります。ケーキのコンベンションに従ってください。

アルバム内の画像の数を維持するには:counterCacheを使用して、カウントを自分で把握する必要はなく、アルバムのレコードで利用できるようにします。

+0

こんにちは!投稿を更新しましたが、counter_cacheは機能しません。私はparent_albumをalbum_idに変更しました。 Countercacheは0の値をすべて表示し、Cake経由でイメージ/アルバムを追加/編集/削除しません。読み込みのみ...どのようにカウンターキャッシュを更新するのですか? – Dennis

+0

あなたはどこかからデータをインポートしますか? Cakeで追加/編集/削除しないと、countCacheは機能しません。カウントフィールドをクエリして設定するための独自のコードを記述することができます。 –

+0

はい、私は毎晩カウンターを書き直すべきだと思います。そして、はい、私は自分の輸入者をPHPで書いています。 – Dennis

関連する問題