我现在正在使用Zend Framework数据库关系几周。我的第一印象非常好,但我确实有一个与将相关数据插入多个表有关的问题。对于一个小测试应用程序,我通过使用熔丝表将两个表相互关联。
+---------------+ +---------------+ +---------------+
| Pages | | Fuse | | Prints |
+---------------+ +---------------+ +---------------+
| pageid | | fuseid | | printid |
| page_active | | fuse_page | | print_title |
| page_author | | fuse_print | | print_content |
| page_created | | fuse_locale | | ... |
| ... | | ... | +---------------+
+---------------+ +---------------+
上面是我的数据库架构的一个例子
现在,我的问题是如何将相关数据插入到两个单独的表中,并同时将两个新创建的ID插入到保险丝表中。如果有人可以解释或给我一个主题相关的教程。我很感激!
答案 0 :(得分:1)
我假设你为每张桌子设置了单独的模型。然后只需在Prints
表中插入东西,将返回的ID存储在变量中。然后在Pages
表中插入东西并将返回的ID存储在另一个变量中。最终在Fuse
表中插入数据。这里不需要任何“同时”(原子)操作。新插入的行的ID由save()
返回(我假设您为此使用自动增量字段)。
$printsModel = new Application_Model_Prints();
$pagesModel = new Application_Model_Pages();
$fuseModel = new Application_Model_Fuse();
$printData = array('print_title'=>'foo',
...);
$printId = $printsModel->insert( $printData );
$pagesData = array('page_author'=>'bar',
...);
$pageId = $pagesModel->insert($pagesData);
$fuseData = array('fuse_page' => $pageId,
'fuse_print' => $printId,
...);
$fuseId = $fuseModel->insert($fuseData);
因此是伪代码,因此您可能希望将插入移动到模型中并执行somoe即标准化等。
我还建议更多关注字段命名约定。它通常有帮助,现在你得到了fuseid
,但fuse_page
。所以它应该是fuse_id
或fusepage
(更不用说我怀疑这个字段存储了ID,因此它会是fuse_page_id
或fusepageid
)。
答案 1 :(得分:0)
Prints和Pages是两个实体。为每个
创建行类class Model_Page extends Zend_Db_Table_Row_Abastract
{
public function addPrint($print)
{
$fuseTb = new Table_Fuse();
$fuse = $fuseTb->createRow();
$fuse->fuse_page = $this->pageid;
$fuse->fuse_print = $print->printid;
$fuse->save();
return $fuse;
}
}
现在当你创建页面
$page = $pageTb->createRow() ; //instance of Model_Page is returned
$page->addPrint($printTb->find(1)->current());