NDB problem so zapisom where obsahujuce array

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

Caute, som si zakrualizoval Nette dev 2.1, a zapis ktrory mi doteraz siel, tak uz nejde, neviete mi poradit ako sa to teraz zapisuje?

$relatedProductList = array(11,22,33);
$productList->where('id NOT IN (?)', $relatedProductList);

vracia mi to:

Column operator does not accept array argument.

@enumag ma upozornil na toto:Database: SqlBuilder::addWhere() consider NOT , ale v tom to neni lebo aj ked nepouzijem NOT, tak mam tu istu hlasku. Neviete niekto ako na to?

JakubTN
Bronze Partner | 49
+
0
-

Skus takto:

$productList->where('NOT id', $relatedProductList);
duskohu
Člen | 778
+
0
-

@Jakub TN dakujem, toto sice prejde bez erroru, ale sql vygeneruje bez NOT, takze to nie je spravne riesenie.

WHERE (`id` IN (44, 45, 42, 46, 47, 48, 49))
hrach
Člen | 1836
+
0
-

@duskohu: tomu neverim. ted jsem si to pridal to testu a funguje to spravne.

je treba jeste zminit logiu:

  • $productList->where('NOT id', $relatedProductList); nerika, jaky operator se ma pouzit, takze pokud treba bude $relatedProductList boolean, tak se v postgre pouzije IS TRUE.
  • pokud chces vynutit operator pro pole, pouzij
$productList->where('NOT id IN', $relatedProductList);
// respektive
$productList->where('NOT id IN ?', $relatedProductList);

Vim o te nejednote, s jakym to zpracovava Statement, ctelo by to sjednotit, asi idealne tak, ze se to presune cele to zpracovani poli do Sqlprocesoru.

duskohu
Člen | 778
+
0
-

@hrach: dakujem velmi pekne, mas pravdu mal som tam chybu. Teraz to uz funguje ok.