2009-10-16 2 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 пока нет возможности вставить из выделенного объекта. Однако, если вам нужна эта функция только для одного адаптера, то вы можете использовать аналогичный подход приведен ниже:

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

+0

Я вижу. Не знаете, как это сделать ... –

Смежные вопросы