books、book_sections、およびユーザー(システムエンドユーザー)用に個別の db_table クラスがあります。book テーブルには、book_title、section_id (book_section) 、data_entered_user_id (本の情報を入力した人) の列があります。
画像を見るにはこの URL にアクセスしてください (stackoverflow を初めて使用するため、画像の投稿は許可されていません) img685.imageshack.us/img685/9978/70932283.png
システムのバックエンドで、既存の本を編集するためのフォームを追加しました(GET パラメータから本の ID を取得し、関連データをフォームに入力します)。form には、book_title、book_section、およびdata_entered_userの要素があります。
エキサイティングな本のデータを取得して「本の編集フォーム」にする book_section と user テーブルを bookテーブルと結合して、 book_section_name と usernameを取得します(data_entered_user: read only- サイドバーに表示)
画像を見るにはこの URL にアクセスしてください (stackoverflow を初めて使用するため、画像の投稿は許可されていません) img155.imageshack.us/img155/2947/66239915.jpg
クラス App_Model_Book で Zend_Db_Table_Abstract を拡張します
public function getBookData($id){
$select = $this->select();
$select->setIntegrityCheck(false);
$select->from('book', array('id','section_id','data_entered_user_id',...));
$select->joinInner('section','book.section_id = section.id',array('section_name' =>'section.name' ));
$select->joinInner(array('date_entered_user' => 'user'),'book.date_entered_user_id = date_entered_user.id',array('date_entered_user_name' =>'date_entered_user.user_name' ));
$select->where("book.id = ?",$id);
return $this->fetchRow($select);
}
public function updateBookData($id,$title,$section_id,...)
{
$existingRow = $this->fetchRow($this->select()->where('id=?',$id));
$existingRow->title = $title;
$existingRow->section_id = $section_id;
//....
$existingRow->save();
}
Admin_BookController -> editAction() で
$editForm = new Admin_Form_EditBook();
$id = $this->_getParam('id', false);
$bookTable = new App_Model_Book();
$book_data = $bookTable ->getBookData($id);
//set values on form to print on form when edit book
$editForm->book_title->setValue($book_data->title);
$editForm->book_section->setValue($book_data->section_name);
//........
//If form data valid
if($this->getRequest()->isPost() && $editForm->isValid($_POST)){
$bookTable = new App_Model_Book();
$bookTable ->updateBookData(
$id,
//get data from submitted form
$editForm->getValue('title'),
//....
);
既存の本を編集するとき
- App_Model_Book クラスの getBookData() メソッドからデータを取得します
- 編集データ送信後、フォームデータが有効な場合はApp_Model_BookクラスのupdateBookData()メソッドでデータ保存
しかし、book_section_name と data_entered_user_nameを使用してブック テーブルのカスタム Db_Table_Row(Zend_Db_Table_Row を拡張) クラスを作成した場合、それを使用して既存のブック データを取得し、新しい Book(db_table) クラスを作成せずに updateBookData を呼び出さずにブック データを編集した後に保存できることがわかりました。 () 更新されたデータを保存します。しかし、カスタム Db_Table_Row(extends Zend_Db_Table_Row) class にどのコードを記述すればよいかわかりません。
私の問題を簡単に理解できると思います
カスタム db_table_row クラスを作成して、特定の db_table クラスのデータ フォーム 2 結合テーブルを含むカスタム行を作成する方法は?
zend framewok と stackoverflow は初めてです。あなたが私の最初の質問と混同していたら、私を許してください.
再度、感謝します。