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 タグで囲えば、見やすい結果が取得できます。ワンポイント!
結果
あれぇ~?です。ビューを Boards フォルダだと認識してくれません。
Boards の複数形を現す s がいけないみたいです。本には Boards フォルダにせよ!と書いてあるし、公式のブログチュートリアル – レイヤーの追加 — CakePHP Cookbook v2.x documentation でも View フォルダの下に作るフォルダは複数形です。
試しに、指摘どおりに Board と単数形にフォルダ名を変更して、 cake/sample/app/View/Board/index.ctp、としてみます。
表示されました。。。。うーん、これでいいのでしょうか?いや、おかしいはずです。なぜなら、本家 CakePHPの規約 — CakePHP Cookbook v2.x documentation を読んでみても View フォルダ内に作るフォルダは、複数形です。単数形ではだめなはずです。・・・わかりません。
→解決しました!CakePHP の View 内のフォルダ名が規約違反でも通ってしまう問題を解決しました! | oki2a24
課題
- View フォルダ内に作るフォルダ名が単数形でないとエラーとなる不思議
→解決しました!CakePHP の View 内のフォルダ名が規約違反でも通ってしまう問題を解決しました! | oki2a24 - table のセル内で改行を有効にするにはどうしたら良いでしょう?
「CakePHP2 で DB データを表示するシンプルな例!モデルなしで勉強です!」への1件の返信
[…] CakePHP で DB データを表示するシンプルな例!モデルなしで勉強です! | oki2a24 の続きとなります。 […]