2009-10-16 49 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