Druhý parametr funkce query

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Facedown
Člen | 38
+
0
-

Ahoj, je možné jako druhý parametr ve funkci query předat pole? Potřebuji to proto, že potřebuji naplnit dotaz pro DELETE.

Potřebuji udělat něco takového:

$this->database->query($query . rtrim($queryParts, ' OR '), $values);

$query obsahuje v tomto případě DELETE FROM xx WHERE a $queryParts obsahuje něco jako ID = ? OR ID = ?.

Poté, co úspěšně poskládám dotaz, potřebuji jednoduše předat pole jako placeholdery, ovšem dostanu výjimku.

Má otázka tedy zní, je možné jako druhý parametr předat pole? Nebo je zde nějaký jiný způsob jak dosáhnout mnohonásobného odstraňování prvků z databáze?

Děkuji za odpověď.

David Kudera
Člen | 455
+
+2
-

No mám takový pocit, že můžeš použít

$this->database->table('tableName')->where('id = ? OR id = ?', $id, $id2)->delete();

// ale pokud to má být where jen na víc id, tak spíš bych zkusil IN

$this->database->table('tableName')->where('id IN(?)', [$id, $id2])->delete();

třeba by to mohlo fungovat, nette database nepoužívám, takže jen doufám, že je to správně ;-)

nanuqcz
Člen | 822
+
+3
-

Ahoj,
jj NetteDB umí formátovat pole, pokud si dobře pamatuju. Tzn z array(0 => 'foo', 1 => 'bar', 2 => 'baz') udělá v SQL ('foo', 'bar', 'baz'). Takže to, co napsal @DavidKudera by mělo fungovat:

$database->table('tableName')->where('id IN ', [$id, $id2])->delete();

EDIT: Potvrzeno, teď jsem to zkoušel. Dokonce to funguje i bez IN, NetteDB si ho tam v případě pole sama doplní:

$database->table('tableName')->where('id', [$id, $id2])->delete();

Takže záleží na tobě, co ti přijde přehlednější.

Editoval nanuqcz (23. 8. 2014 11:20)

Facedown
Člen | 38
+
0
-

@DavidKudera, @nanuqcz Díky :)