2009-10-16 61 views
4

插入..從選擇..我有一個項目移動從購物車到訂單表下面的原始查詢:使用Zend分貝

insert into webshop_order_item (
    order_id, 
    product_id, 
    count 
) 
select 
    1, 
    product_id, 
    count 
from 
    webshop_cart 

我使用Zend DB爲我所有的造型。我想知道是否有辦法實現上述查詢的目標而不必使用原始查詢?

回答

6

在zend db中沒有辦法從select中插入。不過,如果你需要這個功能只爲一個適配器,那麼你可以使用類似如下的方法:

public function insertSelect($tableName, Zend_Db_Select $select, array 
$fields = array()) { 
    $fieldString = ''; 
    if (count($fields)) 
    { 
     foreach($fields as $fieldKey => $field) 
     { 
      $fields[$fieldKey] = $this->quoteIdentifier($field); 
     } 

     $fieldString = ' (' . implode(',', $fields) . ')'; 
    } 

    $query = "INSERT INTO ".$this->quoteIdentifier($tableName) . 
$fieldString . " "; 
    $query .= $select; 

    $this->_db->query($query); 
} 
2

這對我工作得很好:我使用的是Zend_Db_Expr。根據需要進行消毒。

$this->db->insert("sa_article_attributes", array(
    "article_id" => $sid, 
    "article_attribute_id" => new Zend_Db_Expr("(
     SELECT Attribute.id FROM sa_attributes Attribute 
     WHERE Attribute.title = '{$category}' 
     LIMIT 1 
     )") 
    ) 
); 
+0

這是不一樣的。我的問題查詢將插入多行。你的只會插入一個。 – sroes 2013-03-07 20:14:05

+0

我明白了。不知道該怎麼做... – 2013-03-07 21:06:37