環境と現状

  • 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 でやりたい処理を書くのか、というのも理解していません。

是非、ご回答よろしくお願いします。