☆modelによるCRUD(クラッド)
以下の4つの機能を使う。
◆Create
◆Update
◆Delete
◆Read←昨日からやってるデータの呼び出し
◆Create
action側 //insertのcomment。 //インスタンス化。空のオブジェクトを生成。 $comment = new Comment(); //名前と内容を入力。 $comment->setNickname('satou'); $comment->setContent('今日はいい天気'); //insert文発行 $comment->save(); //insertのmember //インスタンス化。空のオブジェクトを生成。 //$member = new Member(); //名前とメールを入力。idカラムは自動なので不要。 //カラムにcreated_at、update_atがあればSymfonyが自動で一緒にやってくれる。 //$member->setNickname("ooyama"); //$member->setMailaddress("ooyama@sample.com"); //insert文発行 //$member->save(); //最初に必ずセット select * from member;と同じ。 $c = new Criteria(); View側commentテーブル <div class="tblData"> <table> <tr> <th>名前</th> <th>内容</th> </tr> <?php foreach ($comments as $comment):?> <tr> <td><?php echo $comment->getNickname();?></td> <td><?php echo $comment->getContent();?></td> </tr> <?php endforeach;?> </table> </div> //$comment+sで複数にする。commentテーブルのすべてのデータを引き出す。 $this->comments = CommentPeer::doSelect($c);
2時間目
◆Update
Createとの差異は空のオブジェクト生成をしないことだけ。
$member = MemberPeer::retriveByPK();を使う点のみ。
//Update $member = MemberPeer::retrieveByPK(5); //名前とメールを入力。 $member->setNickname("ooyama"); $member->setMailaddress("ooyama@sample.com"); //insert文発行 $member->save();
◆Delete
//Delete $member = MemberPeer::retrieveByPk(7); //memberがあれば削除。こうしないとエラーになる。 if($member){ $member->delete(); }
☆練習問題
1.bbs2でmember_addモジュール作成
2.input、confirm、resultのaction作成
3.resultでinsert処理
1~2は3/23覚書を参考に~。
3時間目
☆練習問題答え合わせ
public function executeConfirm() { $this->name = $this->getRequestParameter("name"); $this->mail = $this->getRequestParameter("mail"); return sfView::SUCCESS; } public function executeInput() { return sfView::SUCCESS; } public function executeResult() { //insertのmember //インスタンス化。空のオブジェクトを生成。 $member = new Member(); //nameとmailを変数にして渡す。 $name = $this->getRequestParameter("name"); $mail = $this->getRequestParameter("mail"); //insertのmember //インスタンス化。空のオブジェクトを生成。 $member = new Member(); //変数にした名前とメールを入力。 $member->setNickname("$name"); $member->setMailaddress("$mail"); //insert文発行 $member->save(); return sfView::SUCCESS; }
4時間目
1.bbs2でmember_list、member_editモジュール作成。
2.モジュール作成。一覧表に編集ページリンクつけて、idを渡す。
3.余裕のある人はdeleteで削除処理
5時間目
作成続き
6時間目
ううむidのReadがどうしても理解できなかった・・・・・・。member_addはさくっとできたのに(つД`)
自力でできなかった人は/bbs2/apps/front/modules/に移動してから、
mv member_list bk.member_list
mv member_edit bk.member_edit
でバックアップとっても一回やろう。
public function executeConfirm() { //IDを受け取る $this->id = $this->getRequestParameter("id"); //名前、メールアドレスを受け取る $this->name = $this->getRequestParameter("name"); $this->mail = $this->getRequestParameter("mail"); return sfView::SUCCESS; } public function executeInput() { //IDを受け取る $id = $this->getRequestParameter("id"); $this->member = MemberPeer::retrieveByPK($id); //名前、メールアドレスを受け取る(オブジェクトごと受け取るときは無しでよい) $this->name = $this->getRequestParameter("name"); $this->mail = $this->getRequestParameter("mail"); return sfView::SUCCESS; } public function executeResult() { //update-member //nameとmailを変数にして渡す。 $name = $this->getRequestParameter("name"); $mail = $this->getRequestParameter("mail"); //IDを指定。 $id = $this->getRequestParameter("id"); $member = MemberPeer::retrieveByPK("$id"); //変数にした名前とメールを入力。ここでIDは要らないよ。 $member->setNickname("$name"); $member->setMailaddress("$mail"); //Update実行 $member->save(); return sfView::SUCCESS; }insertSucces.php
<form action="/member_edit/confirm/" method="POST"> 名前:<input type="text"name="name" value="<?php echo $member->getNickname();?>"><br> メールアドレス:<input type="text"name="mail" size="30" value="<?php echo $member->getMailaddress();?>"> <br> <input type="submit" name="send" value="確認"> <input type="hidden" name="id" value="<?php echo $member->getId();?>"> </form>comfirmSucces.php
<form action="/member_edit/result/" method="POST"> 名前: <?php echo $name;?> です。 <br> <input type="hidden" name="name" value="<?php echo $name;?>"> メールアドレス: <?php echo $mail;?> です。 <br> <input type="hidden" name="mail" value="<?php echo $mail;?>"> <input type="hidden" name="id" value="<?php echo $id;?>"> <input type="submit" name="send" value="更新する"> </form>resultSucces.php
完了しました。
おまけ
commentの検索 View側 <form action="/" method="POST"> 名前:<input type="text" name="keyword2"> <input type="submit" name="send" value="送信"></form> action側 //シンプルなlike検索機能bycomment $d = new Criteria(); $keyword2 = $this->getRequestParameter("keyword2"); if($keyword2 !=""){ $d->add(CommentPeer::NICKNAME, "%".$keyword2."%", Criteria::LIKE); } //$comment+sで複数にする。commentテーブルのすべてのデータを引き出す。 $this->comments = CommentPeer::doSelect($d);