4

我有以下原始查询将商品从购物车移动到订单表:

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

我正在使用 Zend DB 进行所有建模。我想知道是否有一种方法可以在不必使用原始查询的情况下实现上述查询的目标?

4

2 回答 2

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);
} 
于 2009-11-13T14:12:38.443 回答
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
        )")
    )
);
于 2013-03-07T19:59:17.320 回答