2

Zend Framework データベース関係を数週間使用しています。私の第一印象はかなり良いですが、関連データを複数のテーブルに挿入することに関連する質問があります。ちょっとしたテスト アプリケーションとして、ヒューズ テーブルを使用して 2 つのテーブルを相互に関連付けました。

      +---------------+      +---------------+      +---------------+
      |     Pages     |      |     Fuse      |      |    Prints     |
      +---------------+      +---------------+      +---------------+
      | pageid        |      | fuseid        |      | printid       |
      | page_active   |      | fuse_page     |      | print_title   |
      | page_author   |      | fuse_print    |      | print_content |
      | page_created  |      | fuse_locale   |      | ...           |
      | ...           |      | ...           |      +---------------+
      +---------------+      +---------------+

上記は私のDBアーキテクチャの例です

さて、私の問題は、関連データを2つの別々のテーブルに挿入し、新しく作成された2つの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);

したがって、擬似コードであるため、インサートをモデルに移動して、正規化などのsomoeを実行することをお勧めします。

また、フィールドの命名規則にもっと注意を払うことをお勧めします。それは通常役に立ちます、そして今あなたは得ましfuseidたがまたfuse_page。したがって、またはである必要がありますfuse_idfusepage言うまでもなく、このフィールドにはidが格納されていると思われるので、fuse_page_idまたはになりますfusepageid)。

于 2012-09-04T09:01:16.563 に答える
0

PrintsとPagesは2つのエンティティです。それぞれの行の留め金を作成します

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 に答える