我为图书, book_sections 和用户(系统最终用户)提供了单独的db_table类。 图书表 book_title , section_id (book_section) data_entered_user_id 列谁输入了书信息)。
转到此网址查看图片(我不允许发布图片因为我是stackoverflow的新手) img685.imageshack.us/img685/9978/70932283.png
在系统的后端我添加了一个表单来编辑现有的书(从GET参数中获取书籍ID并将相关数据填入表格中)。表单包含 book_title , book_section 和 data_entered_user 的元素。
将令人兴奋的图书数据添加到“编辑图书表单”我加入book_section和带有图书的用户表表,以获取 book_section_name和用户名(data_entered_user:只读 - 显示在旁边吧)
转到此网址查看图片(我不允许发布图片因为我是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'),
//....
);
编辑现有书籍时
但是我看到了如果我创建了一个自定义 Db_Table_Row(扩展Zend_Db_Table_Row) 用于书桌的课程 book_section_name和 data_entered_user_name 我可以使用它 获取现有图书数据并保存 编辑预订数据后没有 创建新的Book(db_table)类而不调用updateBookData()来保存更新的数据。但我不知道我应该在自定义上编写哪些代码 Db_Table_Row(扩展Zend_Db_Table_Row) 类
我认为你可以用简单的方式理解我的问题
如何编写自定义db_table_row类以创建包含数据的自定义行 表单2连接表为特定的db_table类?
我是zend framewok和stackoverflow的新手。如果你对我的第一个问题感到困惑,请原谅我。
再次感谢。
答案 0 :(得分:3)
1)在db_table类的create字段中包含行类,例如:
protected $_rowClass = 'App_Model_Db_Books_Row';
并为父表添加参考图:
protected $_referenceMap = array(
'Section' => array(
'columns' => 'sectionId',
'refTableClass' => 'App_Model_Db_Sections',
'refColumns' => 'id'
),
'User' => array(
'columns' => 'userId',
'refTableClass' => 'App_Model_Db_Users',
'refColumns' => 'id'
)
);
2)在行类中,您必须为父表定义变量:
protected $section;
protected $user;
在这种情况下,我创建了一个名为“load”的方法:
public function load()
{
$this->section = $this->findParentRow('App_Model_Db_Sections');
$this->user = $this->findParentRow('App_Model_Db_Users');
}
在构造函数中,我称之为:
public function __construct(array $config = array())
{
parent::__construct($config);
$this->load();
}
结果之后:
$book_data = $bookTable ->getBookData($id);
您可以从参考表中访问数据,例如:
$book_data->section->name = "Book Section";
$book_data->section->save();