cakephp アソシエーションでモデル名、コントローラ名が特殊(?)な場合の設定方法
環境と現状
- cakephp2.7 (フレームワーク初挑戦です)
mysql
DBの構造
- Sites
- id
- site_name
- site_url
- Articles
- id
- site_id (Sites の id と連動しています)
- article_title
- article_url
- pub_date (記事が更新された時間です)
Contoller
IndexesController.php
class IndexesController extends AppController {
public $uses = ['Article'];
public function index() {
$indexArticles = $this->Article->find('all', array(
'fieleds' => array('article_title', 'article_url', 'pub_date'),
'order' => array('pub_date' => 'desc'),
'limit' => 50
));
$this->set('indexArticles', $indexArticles);
}
}
Model
View
Indexes/index.ctp
<table>
<tr>
<th>更新時間</th>
<th>記事タイトル</th>
</tr>
<?php
foreach ($indexArticles as $data) {
$title = $data['Article']['article_title'];
$link = $data['Article']['article_url'];
$pub_date = $data['Article']['pub_date'];
echo '<tr>';
echo '<td>'.$pub_date.'</td>';
echo '<td><a href="'.$link.'" target="_blank">'.$title.'</a></td>';
echo '</tr>';
}
?>
</table>
となっており、Articles からの記事情報の取得はできています。
これで index ページに記事の一覧を表示させています。
目的
- hoge.com というアンテナサイトを構築する。
- hoge.com のトップページは、最新記事の一覧とサイト名が羅列されている。
- (↓蛇足)
- hoge.com/Sites/ で登録されているサイト一覧
- hoge.com/Sites/1 で Sites id 1 のサイトの最新記事一覧が表示される
cakephp のアソシエーションを利用してこのような記事リンクに対してサイト名の表示をしたいのが目的です。
http://kita-kore.com/ のようなアンテナサイトを想像してもらえるとわかりやすいかと思います。
ひと通りcakephp のチュートリアルを勉強した結果、アソシエーションの $hasMany
を使うのかなと想像しているのですが、どういう構築をしたらいいのかわかりません。
Controller を IndexesController.php としているのがそもそもナンセンスなのか
SitesController.php でやりたい処理を書くのか、というのも理解していません。
是非、ご回答よろしくお願いします。