Ich muss eine Sammlung nach einem Negativ filtern FIND_IN_SET
.
Ich weiß, ich kann dies tun:
$collection->addAttributeToFilter(
'attribute_code',
[['finset' => 4], ['null' => true]]
);
Dies filtert die Sammlung nach FIND_IN_SET(...) OR value IS NULL
. Aber das FIND_IN_SET
muss negativ sein ( NOT FIND_IN_SET
). Wie kann ich das erreichen?
Muss ich dafür wirklich einen Custom erstellen Zend_Db_Expr
?
Edit: Nach der Antwort von @Marius habe ich das mit gelöst Zend_Db_Expr
. Für den Fall, dass jemand anderes auf dieses Problem stößt, habe ich es folgendermaßen gelöst:
$collection->getSelect()->where(
new \Zend_Db_Expr(
sprintf('NOT FIND_IN_SET(%1$d, at_excluded_customer_groups.value) OR at_excluded_customer_groups.value IS NULL',
$customerGroupId
)
)
);
Meine Situation bestand darin, nach Kundengruppen-ID oder NULL zu filtern.
magento-1.9
magento2
database
attributes
collection
Giel Berkers
quelle
quelle
Antworten:
Ich denke du musst ein dafür erstellen
Zend_Db_Expr
.Es gibt keine Unterstützung für
NOT FIND_IN_SET
.Sie können alle unterstützten Bedingungen in sehen
Varien_Db_Adapter_Pdo_Mysql::prepareSqlCondition
.Wie Sie sehen können, gibt es nichts Vergleichbares zu dem, was Sie brauchen.
quelle
Zend_Db_Expr
Die Verwendung
nin
mit einem Array von Werten sollte meiner Meinung nach ausreichen:quelle
1,2,3,4
. Das macht der Fund im Set. Es teilt den Wert durch Komma und sucht nach übereinstimmenden Werten.1,2,3
, das keine 4 enthält.