web-dev-qa-db-fra.com

Zend Framework: Comment supprimer une ligne de tableau où plusieurs choses sont vraies?

Normalement, cela fonctionnerait pour moi:

$db = Zend_Db_Table::getDefaultAdapter();
$where = $db->quoteInto('id = ?', $id);
$db->delete('tablename', $where);

mais je dois faire correspondre deux identifiants. Je ne sais donc pas vraiment comment le structurer.

WHERE first_id = 'id1' AND second_id = 'id2'

Alors, comment dois-je faire avec le Zend Framework?

24
Andrew

Pour prolonger la réponse de Jason W:

Je ne sais pas exactement ce que dit la 3e section

Cela signifie que vous pouvez le faire:

$db->delete('tablename', array(
    'first_id = ?' => $first_id,
    'second_id = ?' => $second_id
));

Et l'adaptateur citera tout pour vous.

Je ne pense pas cependant que la documentation soit très claire.

58
smack0007

Depuis le manuel zend lors de la suppression ():

Si vous omettez le deuxième argument, le résultat est que toutes les lignes de la table de base de données sont supprimées.

Si vous fournissez un tableau de chaînes comme deuxième argument, ces chaînes sont jointes en tant que termes dans une expression séparée par des opérateurs AND.

Si vous fournissez un tableau de tableaux comme deuxième argument, les valeurs seront automatiquement citées dans les clés. Ceux-ci seront ensuite réunis sous forme de termes, séparés par des opérateurs AND.

Je ne sais pas exactement ce que dit la 3e section, mais la 2e implique que vous pouvez faire:

$where = array();
$where[] = $db->quoteInto('first_id = ?', $first_id);
$where[] = $db->quoteInto('second_id = ?', $second_id);
$db->delete('tablename', $where);
20
Justin W

Si vous êtes dans un modèle qui étend la classe Zend_Db_Table_Abstract, vous devez utiliser une structure différente:

class Yourmodel extends Zend_Db_Table_Abstract {
    protected $_name = 'tablename';
    protected $_primary = 'primarykey';
    public function remove($first_id, $second_id) {
        $where = array();
        $where[] = $this->getAdapter()->quoteInto('first_id = ?', $first_id);
        $where[] = $this->getAdapter()->quoteInto('second_id = ?', $second_id);
        $this->delete($where);
    }
}
1
sanneo