更新しました
わかりました。投稿に「if」という単語がありませんでした。ユーザーが投票した場合にのみエントリが必要だと思いました。正しいコードについては、以下の更新をお読みください。将来必要になった場合に備えて、最初の部分は残しておきます。INNER JOINは、そのエントリに少なくとも1票がある場合にのみエントリを取得します。
------------------最初の部分(間違っている)--------------------
Entries
モデル内で関係を宣言します。
public function relations() {
return array(
'votes' => array(self::HAS_MANY, 'Votings', 'entry_id'),
);
}
また、データプロバイダーを作成するときは、次のようにします。
$dataProvider = new CActiveDataProvider('Entries',
array(
'criteria' => array(
'with' => array(
'votes'=>array(
'joinType' => 'INNER JOIN'
)
)
)
)
);
これにより、上記で記述したSQLは作成されませんが、正しい方法で作成されます。SQLは次のようになります。
select * from tbl_entries t INNER JOIN tbl_votings v ON t.id = v.entry_id
-----------------第2部(右)------------------
アップデート
さて、単にエントリを取得して投票する必要がある場合は、最初の部分から同じ関係宣言を行います。
public function relations() {
return array(
'votes' => array(self::HAS_MANY, 'Votings', 'entry_id'),
);
}
そして、次のようにデータプロバイダーを作成します。
$dataProvider = new CActiveDataProvider('Entries',
array(
'criteria' => array(
'with' => array('votes')
)
)
);