カテゴリー
コンピューター

CakePHP2 で DB データを表示するシンプルな例!モデルなしで勉強です!

CakePHP の MySQL 設定を行います♪ | oki2a24 の続きとなります。

CakePHP でデータベースからデータをひっぱって来る勉強をします。シンプルに!なのでモデルは使いません!

まとめ

  • DB データは $this->Board->find(‘all’); で取得できますが、この Board はモデル名を指す。モデルなので単数形であることに注意です。
  • 「Board はモデル名を指す」といいつつ、Model フォルダに Board モデルが無くても問題ありません。
  • ただし DB に Boards テーブルは必要です。テーブルは複数形であることに注意です。

前提

  • CakePHP 2.1.3 導入済み。
  • ドキュメントルート/cake/sample/(ここにCakePHP が入ってます。app ディレクトリとか、.travis.yml ファイルとか。)

DB の準備

前回、DB を作っておいてからの設定を勉強しましたが、その DB を作る SQL も載せておきます。あとは、テーブルと、データの SQL となります。

# DB、ユーザ、の作成。パスワードの設定
GRANT ALL PRIVILEGES ON cakebords.* TO cakebords@localhost IDENTIFIED BY 'cakebords';
FLUSH PRIVILEGES;
CREATE DATABASE cakebords CHARACTER SET utf8;

# テーブルの作成
CREATE TABLE `boards` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `title` varchar(255) NOT NULL,
 `content` text NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# データの作成
INSERT INTO `boards` (`id`, `name`, `title`, `content`) VALUES
(1, '山田', 'はっけよーい', 'のこった!のこった!のこった!のこった!のこった!のこった!のこった!のこった!のこった!★\r\nのこった!のこった!のこった!のこった!のこった!のこった!のこった!のこった!のこった!のこった!★'),
(2, '佐藤', '位置について、よーい', 'ドン!ドン!ドン!ドドンガドン!\r\n\r\nドン!ドン!ドン!ドドンガドン!\r\n\r\nドン!ドン!ドン!ドドンガドン!\r\n\r\nドン!ドン!ドン!ドドンガドン!\r\n\r\nドン!ドン!ドン!ドドンガドン!');

ソース

cake/sample/app/Controller/BoardsController.php

<?php

class BoardsController extends AppController {

	public $name = 'Board';

	public function index() {
		$data = $this->Board->find('all');
		$this->set('data', $data);
	}
}

?>

DB データを $this->Board->find(‘all’); で取得しています。ポイントは、この Board はモデル名を指すということです。モデルなので単数形であることに注意です。モデル=単数形であることは、こちらの CakePHPの規約 — CakePHP Cookbook v2.x documentation でご確認くださいませ。

「Board はモデル名を指す」といいつつ今回、Model フォルダに Board のモデルは作成していません。モデルが無くても DB にテーブルがあれば問題ないのですね。

Boards テーブルを用意したわけですが、ちなみに、テーブルは複数形であることに注意です。

cake/sample/app/View/Boards/index.ctp

<h1>送信フォーム・サンプル</h1>
<table>
<?php

for($i = 0; $i < count($data); $i++) {
	echo $this->Html->tableCells($data[$i]['Board'], array(), array(), true);
}

?>
</table>
<br />
<br />
<br />
<pre>
<?php print_r($data); ?>
</pre>

Html ヘルパーを使っています。詳細は、割愛します。

print_r 関数を pre タグで囲えば、見やすい結果が取得できます。ワンポイント!

結果

CakePHP- the rapid development php framework- Errors.jpg

あれぇ~?です。ビューを Boards フォルダだと認識してくれません。

Boards の複数形を現す s がいけないみたいです。本には Boards フォルダにせよ!と書いてあるし、公式のブログチュートリアル – レイヤーの追加 — CakePHP Cookbook v2.x documentation でも View フォルダの下に作るフォルダは複数形です。

試しに、指摘どおりに Board と単数形にフォルダ名を変更して、 cake/sample/app/View/Board/index.ctp、としてみます。

CakePHP- the rapid development php framework- Board.jpg

表示されました。。。。うーん、これでいいのでしょうか?いや、おかしいはずです。なぜなら、本家 CakePHPの規約 — CakePHP Cookbook v2.x documentation を読んでみても View フォルダ内に作るフォルダは、複数形です。単数形ではだめなはずです。・・・わかりません。

→解決しました!CakePHP の View 内のフォルダ名が規約違反でも通ってしまう問題を解決しました! | oki2a24

課題

「CakePHP2 で DB データを表示するシンプルな例!モデルなしで勉強です!」への1件の返信

コメントを残す