Home > php > CakePHP日記:insertかupdateか

CakePHP日記:insertかupdateか

  • 2007-04-05
  • php

Model#save()は、idがセットされているかどうかでinsertかupdateかを判断しているようです(さらに、lidがセットされていれば、本当に存在するかをSELECTしてみています)。

ですが、一般的なコントローラのeditアクションは、

A.12. Posts の編集:CakePHP プログラマーズ リファレンスガイド

    function edit($id = null)
    {
        if (empty($this->data))
        {
            $this->Post->id = $id;
            $this->data = $this->Post->read();
        }
        else
        {
            if ($this->Post->save($this->data['Post']))
            {
                $this->flash('投稿を更新しました。','/posts');
            }
        }
    }

こんな感じで、データがpostされた場合はidをセットしていません。 ではなぜこれをupdateと判断するかというと、URLの1つめのパラメータは暗黙でデフォルトのモデルのidにセットされるからです。 じゃなくってこのドキュメントの例では、idをhiddenで渡しているからでした。 で、このhiddenが無い場合の話が以下に続きます。

しかし、コントローラでvar $uses = array('Model1', 'Model2')などと明示的に使うモデルを指定していると、この暗黙のidのセットは動作しないようです。

なので、uses を指定している時や、URLの1つめのパラメータをデフォルトのモデルのidとして使いたくない場合は、明示的にidをセットしましょう。

Writeback:0

Comment Form

writeback message: Ready to post a comment.

TrackBack ping me at
http://www.mono-space.net/blog/php/e070405_insert_or_update.trackback

Page Top