ZF2保存到多个表

问题描述:

I have a mapper class, OrganizationMapper that saves data to multiple tables with the save method. The save method looks like this:

public function save(OrganizationInterface $organization) {
        $action = new Insert('TABLE NAME');
        $action->values([<SOME VALUES>]);
        $sql = new Sql($this->dbAdapter);
        $stmt = $sql->prepareStatementForSqlObject($action);
        $result = $stmt->execute();

        $action1 = new Insert('OTHER TABLE NAME');
        $action1->values([OTHER VALUES]);
        $sql1 = new Sql($this->dbAdapter);
        $stmt1   = $sql1->prepareStatementForSqlObject($action1);
        $result1 = $stmt1->execute();
        ...
}

There are a couple more cycles of $action#, $sql#, $stmt#, $result#.

How can I avoid these repetitive cycles?

我有一个mapper类, OrganizationMapper code>,它使用保存 code>方法。 save code>方法如下所示: p>

  public function save(OrganizationInterface $ organization){
 $ action = new Insert('TABLE NAME')  ; 
 $ action-&gt; values([&lt; SOME VALUES&gt;]); 
 $ sql = new Sql($ this-&gt; dbAdapter); 
 $ stmt = $ sql-&gt; prepareStatementForSqlObject($ action)  ; 
 $ result = $ stmt-&gt; execute(); 
 
 $ action1 = new Insert('OTHER TABLE NAME'); 
 $ action1-&gt; values([OTHER VALUES]); 
 $  sql1 = new Sql($ this-&gt; dbAdapter); 
 $ stmt1 = $ sql1-&gt; prepareStatementForSqlObject($ action1); 
 $ result1 = $ stmt1-&gt; execute(); 
 ... 
  } 
  code>  pre> 
 
 

还有几个循环的 $ action# code>, $ sql# code>, $ stmt# code>, $ result# code>。 p>

如何避免这些重复循环? p> div>

To avoid duplicate code create an additional method, let's call it insertIntoTable(). This method will be an auxiliary function for inserting data into a certain table:

public function save(OrganizationInterface $organization) {
        $result = $this->insertIntoTable('TABLE NAME', $values);

        $result1 = $this->insertIntoTable('OTHER TABLE NAME', $values1);
        ...
}

private function insertIntoTable($tableName = "", $values) {
        $action = new Insert($tableName);
        $action->values($values);
        $sql = new Sql($this->dbAdapter);
        $stmt = $sql->prepareStatementForSqlObject($action);
        $result = $stmt->execute();

        return $result;
}