Zend Framework: как вставить новые данные в базу данных, просматривая массив php - PullRequest
0 голосов
/ 11 января 2012
class Model_Core_NodeContents extends Zend_Db_Table_Abstract
{   
    protected $_name = 'node_contents';

    protected $_referenceMap = array(
            "Page" => array(
                    "columns" => array("node_id"),
                    "refTableClass" => "Model_Core_Node",
                    "refColumns" => array("id"),
                    "onDelete" => self::CASCADE,
                    "onUpdate" => self::RESTRICT
                    )
            );

    public function setContent($node_id,$key,$value){
        $select = $this->select()->where("node_id = ?",$node_id)->where($this->_db->quoteInto("`key` = ?",$key));
         echo $select->__toString()."<br />"; 
        $row = $this->fetchRow();
        if($row==false){
            $row = $this->createRow();           
            $row->node_id = $node_id;
            $row->key = $key;
        }
        $row->value = $value;       
        $row->save(); 
        echo $this->_db->lastInsertId();
    }

}

Когда я вызываю приведенный выше код в цикле, в базу данных вставляется только первый элемент массива.

foreach($data as $key => $value){
    $cnode = new Model_Core_NodeContents();                  
    $cnode->setContent($id, $key, $value);                   
}

$this->_db->lastInsertId(); возвращает 0 для каждого элемента данных, кроме первого. Зачем? Как я могу вставить все строки массива $ data в базу данных с помощью цикла?

EDIT

Моя проблема решена. $ row = $ this-> fetchRow (); эта строка была неверной. Я забыл добавить в него $ select. Замена этой строки на $ this-> fetchRow ($ select) решила мою проблему.

1 Ответ

0 голосов
/ 16 января 2012

Моя проблема решена. $ row = $ this-> fetchRow (); эта строка была неверной. Я забыл добавить в него $ select. Замена этой строки $ this-> fetchRow ($ select) решила мою проблему.

...