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

CakePHP2。モデル未使用でデータベースデータ操作の基本を学習します♪

CakePHP の scaffold 応用編を通して使いどころを少しだけ考えます! | oki2a24 の次の投稿となります。

コントローラーとビューを使ってテーブルデータ操作の基本を学習します。モデルの作成は行いません。

ポイント

  • DB データの登録、検索や削除などの操作は、コントローラーから行なう。モデル、ではない。
  • $this->モデル名->関数、で操作する。DB にテーブルがあれば、モデルはなくても大丈夫です。
  • 検索の find 関数の第1引数による動きまとめ
    • find(‘all’); 全レコードを得ます。
    • find(‘first’); 最初の1レコードを得ます。
    • find(‘list’); レコードのリストを得ます。
    • find(‘count’); レコード数を得ます。
  • find 関数で得られる結果の構造は第1引数のタイプによりそれぞれ異なります。
  • find 関数第2引数の conditions で検索条件を指定できます。
  • 削除。delete(削除する行の id )
  • 挿入または更新。save(保存するデータ)

前提

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

ソース

cake/sample/app/Controller/BoardsController.php

<?php

class BoardsController extends AppController {

	public $name = 'Boards';
	// 	public $scaffold;

	/**
	 * 初期表示と検索結果をセットするアクション
	 */
	public function index() {
		// 初期化
		$data = null;
		$first = null;
		$list = null;
		$count = null;
		if (!empty($this->data)) {
			// Bords テーブルを id で検索
			$data = $this->Board->find('all',
					array(
							'conditions' => array(
									'Board.id' => $this->data['Board']['id']
							)
					)
			);
		} else {
			// 初期表示。find 関数の第1引数の働きを確認
			$data = $this->Board->find('all');
			$first = $this->Board->find('first');
			$list = $this->Board->find('list');
			$count = $this->Board->find('count');
		}
		// ビューで使えるように DB データをセット
		$this->set('data', $data);
		$this->set('first', $first);
		$this->set('list', $list);
		$this->set('count', $count);
	}

	/**
	 * Boards テーブルにデータ追加
	 */
	public function addRecord() {
		if (!empty($this->data)) {
			$this->Board->save($this->data);
		}
		$this->redirect('index');
	}

	/**
	 * Boards テーブルのデータを削除。id で指定。
	 */
	public function delRecord() {
		if (!empty($this->data)) {
			$this->Board->delete($this->data['Board']['id']);
		};
		$this->redirect('index');
	}
}

?>

index アクションで最初の表示、そして検索したときの処理を書いています。addRecord アクションでデータの追加と更新、delRecord アクションでデータの削除を行っています。

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

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

<h2>検索</h2>
<?php
echo $this->Form->create(false, array('type' => 'post', 'action' => 'index'));
echo $this->Form->text('Board.id');
echo $this->Form->submit('送信');
echo $this->Form->end();
?>

<br />
<hr>
<br />

<h2>登録・更新</h2>
<?php
echo $this->Form->create(false, array('type' => 'post', 'action' => 'addRecord'));
echo $this->Form->text('Board.id');
echo $this->Form->text('Board.name', array('value' => $data[0]['Board']['name']));
echo $this->Form->text('Board.title', array('value' => $data[0]['Board']['title']));
echo $this->Form->textarea('Board.content', array('value' => $data[0]['Board']['content']));
echo $this->Form->submit('送信');
echo $this->Form->end();
?>

<br />
<hr>
<br />

<h2>削除</h2>
<?php
echo $this->Form->create(false, array('type' => 'post', 'action' => 'delRecord'));
echo $this->Form->text('Board.id');
echo $this->Form->submit('送信');
echo $this->Form->end();
?>

<br />
<hr>
<br />

<table>
	<?php

for($i = 0; $i < count($data); $i++) {
	$arr = $data[$i]['Board'];
	echo "<tr><td>{$arr['id']}</td>";
	echo "<td>{$arr['name']}</td>";
	echo "<td>{$arr['title']}</td>";
	echo "<td>{$arr['content']}</td></tr>";
}

?>
</table>
<br />
<hr>
<br />
<p>all etc</p>
<pre>
<?php print_r($data); ?>
</pre>
<br />
<hr>
<br />
<p>first</p>
<pre>
<?php print_r($first); ?>
</pre>
<br />
<hr>
<br />
<p>list</p>
<pre>
<?php print_r($list); ?>
</pre>
<br />
<hr>
<br />
<p>count</p>
<pre>
<?php print_r($count); ?>
</pre>

$this->Form->text 関数の第2引数にタグの要素を指定することができます。value を指定しています。HTML ソースは、<input value=”テキストタグ★”> という形になります。これで、コントローラーで指定した情報をビューで表示させて、データ更新のときに楽をしよう!そういう算段でございます。公式ドキュメントの FormHelper::text(string $name, array $options) 説明はこちらです。

また、同様のことを $this->Form->textarea 関数でも同様に value に指定をしています。ただし、この場合は textarea の開始、終了タグの間に表示されます。つまり、<textarea value=”テキストエリアタグ★”></textarea> ではなく、<textarea>テキストエリアタグ★</textarea> となります。公式ドキュメントの FormHelper::textarea(string $fieldName, array $options) 説明はこちらです。こちらの関数は、行数などの指定もできるようで、迷ったらぜひ見ましょう!

また、一番下の print_r で、find(‘all’);、find(‘first’);、find(‘list’);、find(‘count’); のデータを表示しています。

結果

http://localhost/cake/sample/boards にアクセスします。画面を分割して表示します。

CakePHP- the rapid development php framework- Boards1.jpg

検索、登録・更新、削除用のフォームと続きまして、一番下に一覧表です。

CakePHP- the rapid development php framework- Boards2.jpg

次に、find(‘all’);、find(‘first’);、find(‘list’);、find(‘count’); を print_r で表示した情報です。それぞれ構造が違いますね。find の all が一番階層が深くて3次元連想配列、次に firstが2次元連想配列、listが1階層の連想配列、count は階層なし!です。

CakePHP- the rapid development php framework- Boards3.jpg

最後に、自動で表示される項目です。SQL 文、つまり実行したクエリを表示してくれます。コントローラーに書いた検索条件などが、正しいかどうか、一目でわかりますね!便利です♪

「CakePHP2。モデル未使用でデータベースデータ操作の基本を学習します♪」への4件の返信

参考させていただきました。
こちらは、秀和のと同じようですが、本のように追加メソッドとは違いますが、
delRecordの前記は必要になるのですか?

コメントを残す