libro
www.tuyano.com
初心者のためのCakePHP2 プログラミング入門

データの追加・更新・削除 (3/3)

作成:2011-11-28 08:07
更新:2011-12-06 19:47

■データを削除する

データの削除も、基本的な考え方はeditと同様です。IDを指定してアクセスすると、そのデータが表示されます。そのまま送信すると、そのIDのデータがテーブルから削除される、という具合です。

データの削除は、Modelクラスの「delete」で行うことができます。これは以下のような形で呼び出します。
$this->Modelクラス->delete( 削除するID , 真偽値 );
第1引数に、削除するデータのIDを指定します。第2引数は、関連するデータを削除するかを示す真偽値です(これはデータのリレーションを行うようになると意味がわかります。今は深く考えなくてOKです)。

この基本的な構造から考えれば、削除の仕組みはデータの更新に似ていることがわかるでしょう。実際の例として、下にサンプルを掲載しておきました。これは「del」アクションとして削除の機能を追加してあります。

ここでは、アクセス時に削除するIDをパラメータとして渡すようにしてあります。「〜/my_sample_datas/del/番号」という形で、最後に削除するID番号をつけてアクセスしてみてください。そのIDの名前がフォームに表示されます。これを確認し、削除して良ければそのままフォームを送信します。これでそのデータが削除されます。

ここでは、データの更新と同様、POST送信された場合に削除の処理をしています。この処理部分は、以下の1行だけです。
$this->MySampleData->delete($this->
    request->data('MySampleData.id'));
deleteの引数に、$this->request->data('MySampleData.id')というようなものが指定されていますね。これで、送信されたフォームからIDの値が取得できます。Form Helperを使ってModel利用のフォームを生成すると、このようにdata('MySampleData.id')というように「モデル名.項目名」という形で送信されたフォームのデータが取得できます。後は、deleteで削除するだけです。

この他に、findと同様に条件を指定してデータを削除するメソッドも用意されています。以下のようなものです。
$this->Modelクラス->deleteAll( 条件設定 , 真偽値 );
第1引数には、削除する項目の検索条件を設定します。つまり、findと同じように条件を指定してデータを検索し、見つかったものをすべて削除する、というわけです。検索条件の設定は、基本的にfindと同じです。

ただし、これはデータがいくつ見つかってもすべてまとめて削除してしまうので、扱いは注意しましょう。扱いを間違えると、誤って大事なデータをごっそり削除してしまう危険がありますから。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※del.ctp

<h1>Edit Page</h1>
<p>MySampleData Delete Form.</p>
<?php
  echo $this->Form->create('MySampleData');
  echo $this->Form->input('id');
  echo $this->Form->input('name');
  echo $this->Form->end('Submit');
?>
※delメソッド

  public function del($id) {
    // レイアウト関係
    $this->layout = "Sample";
    $this->set("header_for_layout", "Sample Application");
    $this->set("footer_for_layout", 
        "copyright by SYODA-Tuyano. 2011.");
    $this->MySampleData->id = $id;
    // post時の処理
    if ($this->request->is('post') || $this->request->is('put')) {
      $this->MySampleData->delete($this->request->
          data('MySampleData.id'));
    } else {
      $this->request->data = 
          $this->MySampleData->read(null, $id);
    }
  }

※関連コンテンツ

「初心者のためのCakePHP2 プログラミング入門」に戻る