質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

2013閲覧

レコードを1行ずつ削除したい。

退会済みユーザー

退会済みユーザー

総合スコア0

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/04/02 18:10

Cakephpを学習中です。
簡単な掲示板を作っています。
削除ボタンを実装し(各テーブルに)、押下時に指定のレコードが削除される。
という実装を行いたいのですが、
削除ボタンを押下すると、errorが出てしまいます。
そして、indexに戻るとレコードが全て消えてしまいます。
どのように実装すればよいでしょうか。

html

1<h1>Sample BBS</h1> 2 3<?=$this->Form->create($entity,['url'=>['action'=>'addRecord']])?> 4<fieldset> 5 name:<?=$this->Form->text("user_name");?> 6 title:<?=$this->Form->text("title");?> 7 content:<?=$this->Form->text("content");?> 8</fieldset> 9 <?=$this->Form->button('投稿する');?> 10 <?=$this->Form->end();?> 11 12<table> 13 <thead> 14 <tr> 15 <th>Id</th> 16 <th>name</th> 17 <th>title</th> 18 <th>content</th> 19 <th>delete</th> 20 </tr> 21 </thead> 22 23 <tbody> 24 <?php foreach($data as $obj):?> 25 <tr> 26 <td><?=h($obj->id)?></td> 27 <td><?=h($obj->user_name)?></td> 28 <td><?=h($obj->title)?></td> 29 <td><?=h($obj->content)?></td> 30 <!--削除する--> 31 <td><?=$this->Form->postLink('削除',array('action'=>'delRecord'));?></td> 32 </tr> 33 <?php endforeach;?> 34 </tbody> 35</table> 36

PHP

1<?php 2namespace App\Controller; 3use \Exception; 4use Cake\log\log; 5 6class PostsController extends AppController{ 7 //index action 8 public function index(){ 9 $data = $this->Posts->find('all'); 10 $this->set('data',$data); 11 $this->set('entity',$this->Posts->newEntity()); 12 } 13 14 //レコードの追加 15 public function addRecord(){ 16 if($this->request->is('post')){ 17 $p = $this->Posts->newEntity($this->request->data); 18 $this->Posts->save($p); 19 } 20 return $this->redirect(['action'=>'index']); 21 } 22 23 //レコードの削除 24 public function delRecord(){ 25 if($this->request->is('post')){ 26 $this->Posts->deleteAll(); 27 } 28 return $this->redirect(['action'=>'index']); 29 } 30} 31

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

deleteAllを利用しているので全て削除されます
下記のいずれかで行うと良いでしょう。

  • それぞれの行をformで囲い、hiddenでidを埋め込んでおき、そのidをdeleteに渡す
  • 削除ボタンにidをdata属性やjavascriptの関数の引数に埋め込んでおき、ajaxを利用して削除処理を行う

いずれもidをdelete()に渡すことになると思います。

追記:
「エラーが出ます」とのことですが、そのエラーメッセージが提示されていないとなんとも言えませんので、エラーメッセージもあわせて提示いただけるとより得たい回答が得られるかもしれません。
私の回答はCakePHP独自というよりプログラミング言語がどれか関係なしのやり方なので、CakePHPでの表現方法は適宜調べてください。

追記2:
deleteAllはパラメータに何も渡さないと実行されない?ようなのでダミーデータを渡すと良いようですね。

エラーはこれではないでしょうか?
いずれにしても指定したデータだけ消したい場合はdeleteAllは使えません。その名の通り「すべて削除する」ものです。

投稿2018/04/02 22:54

編集2018/04/02 23:00
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

CakePHP 3 だと思いますが、以下のような実装でいけそうです。

HTML

1 <!--削除する--> 2 <td> 3 <?php echo $this->Form->postLink('削除', array( 4 'action' => 'delRecord', 5 $obj->id, 6 )); ?> 7 </td>

PHP

1 //レコードの削除 2 public function delRecord($id) { 3 if($this->request->is('post')){ 4 $post = $this->Posts->get($id); 5 $this->Posts->delete($post); 6 } 7 return $this->redirect(['action'=>'index']); 8 }

ご参考: CakePHP 3.5 Red Velvet Cookbook > ブログチュートリアル - パート2 > 投稿記事の削除

投稿2018/04/09 05:18

編集2018/04/09 05:22
Lulucom

総合スコア1899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/09 08:55

うまくいきました!ありがとうございます。
Lulucom

2018/04/09 08:58

評価ありがとうございます。がんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問