モデルによるデータの登録[kohana 3.x]
「モデルとデータベース[kohana 3.x]」では、データベースから取得したデータを出力しました。 ここでは、ブラウザ上で入力されたデータをデータベースへ登録する方法を勉強してみます。
Model_Taskに登録用の関数を追加する
「モデルとデータベース[kohana 3.x]」で作成したモデルにtasksテーブルへデータを追加するメソッドを作成します。
class Model_Task extends Kohana_Model{
・・・・・
public function addTask($task, $limit)
{
DB::insert('tasks', array('task','limit'))
->values(array($task, $limit))
->execute();
}
}
モデルのインスタンスが作成されるとデータベースとの間を取り持つDatabaseクラスのインスタンスが 生成されるので、上記関数でINSERT文を実行します。
データベースへINSERTするには、次のように記述することもできます。
$sql = sprintf('INSERT INTO `tasks`'."\n".
'SET `task` = %s,'."\n".
' `limit` = %s',
$this->_db->escape($task),
$this->_db->escape($limit));
$this->_db->query(Database::INSERT, $sql, FALSE);
Taskコントローラーに登録用のアクションを追加する
コントローラーにアクション(メソッド)を追加します。スーパーグローバル変数の$_POSTから 入力された値を取得しモデルへ登録を依頼します。登録後結果を表示します。
class Controller_Task extends Controller_Template_Default
{
// indexアクション
・・・・
public function action_posts()
{
$tasks = new Model_Task();
$this->template->title = 'Kohana 3.0 Test Page';
$this->template->meta_keywords = 'bnote, Kohana, KO3';
$this->template->meta_description = 'A test of Kohana';
$this->template->meta_copywrite = '';
$dat['message'] = "";
if($_POST)
{
if(isset($_POST['task'],$_POST['limit']))
{
$tasks->addTask($_POST['task'], $_POST['limit']);
$dat['message'] = '登録しました。';
}
else
{
$dat['message'] = 'タスク名または期限が入力されていません。';
}
}
// 登録済みタスクの取得
$dat['tasks'] = $tasks->getTopTenTasks();
// 出力
$this->template->content = View::factory('blocks/posts', $dat);
}
}
入力フォームを持つテンプレートの作成
入力フォームを持ったテンプレート(\blocks\posts.php)を次のように作成します。
<?php if(!empty($message)):?>
<?php echo $message.'<br>';?>
<?php endif;?>
<div class="span-24 last">
<table class="tasks">
<?php foreach($tasks as $task):?>
<tr>
<td><?php echo $task['task'];?></td>
<td><?php echo $task['limit'];?></td>
</tr>
<?php endforeach;?>
<form method="POST" action="<?php echo url::base();?>task/posts/">
<table>
<tr>
<td>タスク</td>
<td><input type="text" name="task"></td>
</tr>
<tr>
<td>期限</td>
<td><input type="text" name="limit"></td>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Submit"></td>
</tr>
</table>
</form>
</div>
動作確認
ブラウザからhttp://localhost/ko3/task/posts/へアクセスすると次の画面が表示され、 タスクと期限を入力してSubmitボタンを押すことで、新しいタスクが追加されます。
これで、データベースへ登録されるようになります。
[サンプルファイル]