0

私の CakePHP アプリケーションには、 と の 2 つのモデルがNewsArticleありImageます。ImageNewsArticle、HABTM (has および many に属する) 関連付けの使用に関連付けられているため、作成者は必要に応じて記事のギャラリーを作成できます。

アプリケーションのホームページにトップ ストーリーを表示したいと考えています。トップ ストーリーは、少なくとも 1 つの関連する画像を含む最新の公開記事です。コントローラーでこの状態をどのように形成しますか? これまでのところ、私は持っています:

<?php
$topStory = $this->NewsArticle->find('first', array(
    'order' => array(
        'NewsArticle.created' => 'desc'
    )
));

しかし、モデルImageに添付されたレコードの数を「カウント」する方法がわかりません。NewsArticle

4

2 に答える 2

0

多くの場合、HABTM結合テーブルのCakePHPモデルを作成してから、そのテーブルにクエリを実行することをお勧めします。

NewsArticleには、news_articlesという名前のテーブルがあります。Imageには、imagesという名前のテーブルがあります。したがって、結合テーブルはおそらくnews_articles_imagesです。

結合テーブルとは異なるエイリアス名でモデルを作成することをお勧めします。問題を防ぐため。だからあなたはこのようなことをすることができます。

class Gallery extends AppModel
{
     var $name = 'Gallery';
     var $useTable = 'news_articles_images';
     var $belongsTo = array('NewsArticle','Image');
}

次に、コントローラーで、画像を含む最初の記事を簡単に見つけることができます。

$topStory = $this->Gallery->find('first',array('order'=>array('NewsArticle.created'=>'DESC'));
于 2012-12-28T18:18:37.610 に答える
0

HABTMを使用する必要がある場合は、JOINを実行する必要があります(CakePHPの参加を参照)。

その理由は、通常はfind()実際には別々のクエリを実行し、CakePHPはデータを返す前にデータをまとめるからです。サブ結果の存在によってメイン結果を制限しようとしている場合は、JOINを使用する必要があります。

代わりにHasManyを使用することができる場合(つまり、)、CakePHPのImagecounterCacheを使用できます。belongToNewsArticle

于 2012-12-28T17:49:27.707 に答える