ORMによるデータの登録[kohana 3.x]

ここでは、ORMによる登録(INSERT・UPDATE)処理を勉強してみます。ORMによるデータの取得はできているものとして 進めます。

単純なINSERTとUPDATE

ORMでデータをINSERTするには、モデルのインスタンスをキーの指定無しで生成し項目に値を セット後saveメソッドを実行します。

$task = ORM::factory('task');
$task->task = 'kohana ORM 調査';
$task->save();

上記例では、task項目に「kohana ORM 調査」をセットしたレコードがテーブルに追加されます。

データのUPDATEを行うには、インスタンスの生成時にキーを指定します。更新する項目に 値を設定し、saveメソッドを実行します。

$task = ORM::factory('task',3);
$task->limit = '2010/06/12 12:00:00';
$task->save();

項目へ登録する値の指定方法に、valuesメソッドを使う方法もあります。項目名をキーとした連想配列を 渡すことで項目値が設定できます。

$task = ORM::factory('task');
$task->values(array('task' => 'kohana ORM 調査', 'limit' => '2010/06/12 12:00:00';
$task->save();

複数レコード更新する場合は次のように作成します。

$task = ORM::factory('task');
$task->status = 1
$task->where('status', '=', 0)->save_all();

上記例では、status項目が「0」のデータをすべて「1」に更新しています。

ビューから登録までの例

ビューからデータを受け取り登録するまでを作成してみます。

コントローラーに表示と登録の処理を作成します。

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Task extends Controller_Template_Default
{
    public function action_index()
    {
    }

    public function action_posts()
    {
        $tasks = new Model_Task();

        $this->template->content = View::factory('blocks/posts')
                                 ->bind('message',$message)
                                 ->bind('tasks',$tasks);

        $message = "";

        if($_POST)
        {
            $tasks->values($_POST);
            $tasks->save();
        }

        $tasks = ORM::factory('task')->find_all();
    }
}

フォームからポストされた場合登録後データを表示し、それ以外の場合データを取得して表示します。

ビューは、次のように作成します。

<p>
<?php if(!empty($message)) echo $message;?>
</p>
<div class="span-24 last">
<table class="tasks">
<?php while($tasks->valid()):?>
<tr>
<td><?php echo $tasks->get('task');?></td>
<td><?php echo $tasks->get('limit');?></td>
</tr>
<?php $tasks->next();?>
<?php endwhile;?>
</table>
<hr>

<?php echo Form::open();?>
<p>
<?php echo Form::label('タスク:');?>
<?php echo Form::input('tasks');?>
</p>
<p>
<?php echo Form::label('期限:');?>
<?php echo Form::input('limits');?>
</p>
<?php echo Form::submit(NULL, 'submit');?>
<?php Form::close();?>
</div>