2

我使用 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 同时插入到熔断表中。如果有人可以解释或给我一个主题相关的教程。我会很感激!

4

2 回答 2

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);

因此是伪代码,因此您可能希望将插入移动到您的模型中并进行一些操作,即规范化等。

我还建议多注意字段命名约定。它通常会有所帮助,现在您也得到fuseidfuse_page。所以它应该是fuse_idor fusepage(更不用说我怀疑这个字段存储 id 所以它会是fuse_page_idor fusepageid)。

于 2012-09-04T09:01:16.563 回答
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());
于 2012-09-04T09:01:12.817 回答