2009-10-16 8 views
4

je la requête brute suivante qui se déplace des éléments d'un panier à une table de commande:Insérer dans .. sélectionner .. en utilisant zend db

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

J'utilise le Zend DB pour tous mes modèles. Je me demandais s'il existe un moyen d'atteindre l'objectif de la requête ci-dessus sans avoir à utiliser une requête brute?

Répondre

6

Il n'y a pas encore moyen d'insérer depuis select dans zend db. Toutefois, si vous avez besoin de cette fonction que pour un adaptateur, vous pouvez utiliser approche similaire à ci-dessous:

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

Cela fonctionne bien pour moi: j'utilise un Zend_Db_Expr. Désinfectez au besoin.

$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

Ce n'est pas la même chose. La requête de ma question va insérer plusieurs lignes. Le vôtre n'en insérera qu'un. – sroes

+0

Je vois. Je ne sais pas comment faire ça ... –

Questions connexes