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

アソシエーション利用のデータアクセス (1) (6/6)

作成:2015-11-07 10:59
更新:2015-11-07 10:59

■Membersの削除

データの削除は、更新と同様、indexで表示されるリストに用意した「Delete」リンクをクリックして行います。

このリンクは、「/members/delete/ID番号」というアドレスにPOST送信するようになっています。ですから、deleteアクションに削除の処理を用意すれば、データの削除が行えるというわけです。

実際にindexにアクセスしたとき、Deleteリンクがどのように出力されているかというと、ざっとこんなコードになります。
<form name="post_xxx" 
    style="display:none;"
    method="post"
    action="/members/delete/ID番号">
    <input type="hidden" name="_method"
    value="POST"/>
</form>
<a href="#" onclick="if (confirm(○○))
    { document.post_xxx.submit(); }
    event.returnValue = false;
    return false;">Delete</a>

method="post" action="/members/delete/ID番号"と指定したフォームを用意し、<a>タグからこのフォームのsubmitを実行して送信していたのですね。では、deleteアクションを用意しましょう。下のリスト欄のように作成してください。

ここでも、データ削除の処理は非常に単純です。まず、Membersの「get」メソッドを使い、指定したIDのインスタンスだけを取り出します。
$member = $this->Members->get($id);
if ($this->Members->delete($member))……

後は、Membersの「delete」メソッドを使い、getしたデータのインスタンスを削除するだけです。これも実に簡単ですね!

そうして、indexからviewにかけて、「検索したMembersに関連するMessagesを取得する」ようにデータを検索し、それをsaveしたりdeleteしたりりすれば、更新も削除も思うがまま、というわけですね。

――これで、Members側の基本処理はわかりました。次回は、Messages側の処理について考えてみます。

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

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

●プログラム・リスト●

public function delete($id = null)
{
    $this->request->allowMethod(['post', 'delete']);
    $member = $this->Members->get($id);
    if ($this->Members->delete($member)) {
        $this->Flash->success(__('The member has been deleted.'));
    } else {
        $this->Flash->error(__('The member could not be deleted. Please, try again.'));
    }
    return $this->redirect(['action' => 'index']);
}

※関連コンテンツ

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