2010-06-27 5 views
3

J'essaie de supprimer une ligne, quelqu'un peut-il me dire la syntaxe appropriée pour cela?Zend_Db_Table_Abstract delete

class Application_Model_Event extends Zend_Db_Table_Abstract { 

    protected $_name = 'xx'; 
    protected $_primary = 'xx'; 

    public function deleteEvent ($xx) { 

     $this->delete($this->select()->where('idEvent = ?', '8')); 

    } 
} 

Répondre

8

Non, la fonction delete() prend simplement une condition WHERE.

$this->delete("idEvent=8"); 

Malheureusement, la méthode ne comprend pas la forme à deux arguments comme le font les objets Select. Donc, si vous voulez interpoler des variables dans, vous devez le faire en deux étapes:

$where = $this->getAdapter()->quoteInto("idEvent = ?", 8); 
$this->delete($where); 
+0

Ouais c'est bizarre .. J'ai fini par faire du SQL brut ... Triché le modèle .. $ db = Zend_Registry :: get ("db"); $ db-> query ('DELETE FROM élément WHERE idaForm ='. $ IdaEvent); – user284503

+0

Savez-vous que la classe Db Adapter a une méthode 'delete ($ tableName, $ whereExpression)'? –

11

Pour supprimer la ligne avec la valeur IdEvent de 8:

$this->delete(Array("idEvent = ?" => 8)); 

Il fera tout le bon devis et désinfection des valeurs sans avoir besoin d'utiliser l'instruction quoteInto supplémentaire.

+0

+1 J'ai oublié cet usage. –

+1

Oui, c'est un peu obscur et ça n'est pas mentionné dans le manuel (la dernière fois que j'ai regardé) ... j'ai découvert en lisant le code source de ZF. –