モデルによるデータの登録[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ボタンを押すことで、新しいタスクが追加されます。

これで、データベースへ登録されるようになります。

[サンプルファイル]