2017-07-10 9 views
1
public function update($table, $where = array(), $data_arr = array()){ 

    print_r($data_arr); 

    $adapter = $this->tableGateway->getAdapter(); 

    $projectTable; 

    if($table != null){ 
     $projectTable = new TableGateway($table, $adapter); 
    }else{ 
     $projectTable = new TableGateway('account_master', $adapter); 
    } 
    echo "158"; 

    try { 
     echo "123"; 
     $rowset = $projectTable->update(function(Update $update) use ($where, $data_arr) { 

       $update->set(array('statement_no' => '01010')); 

       $update->where($where); 

      echo $update->getSqlString(); 
     }); 
    } catch (\Exception $e) { 
      print_r($e); 
    } 

    print_r($rowset); 
    die(); 
} 

mon impression de sortie: 158123 il est me donner passe tableau dans la fonction set() que je passe déjà comme argument. j'ai aussi essayé de convertir l'objet en array ((arrya) $ objetc) mais ça ne marche pas pour moi.Zend Framework 2 mise à jour par requête TableGateway objet

[10-Jul-2017 05:11:34 America/Denver] PHP Catchable fatal error: Argument 1 passed to Zend\Db\Sql\Update::set() must be of the type array, object given, called in /home2/flywing1/vendor/zendframework/zend-db/src/TableGateway/AbstractTableGateway.php on line 336 and defined in /home2/flywing1/vendor/zendframework/zend-db/src/Sql/Update.php on line 93 

Répondre

2

Essayez, j'étais avec les mêmes problèmes, j'ai essayé avec cela, et cela a fonctionné.

$rowset = $projectTable->update(array('statement_no' => '01010'), $where); 
2

Vous pouvez le faire en implémentant un objet Zend\Db\Sql\Update. Vous pouvez créer cet objet en utilisant le TableGateway. Vous devriez être en mesure de faire ce qui suit dans votre modèle

public function update($set, $where) 
{ 
    // Here is the catch 
    $update = $this->tableGateway->getSql()->update(); 
    $update->set($set); 
    $update->where($where); 

    // Execute the query 
    return $this->tableGateway->updateWith($update); 
}