Puncte:0

EntityQuery, excludeți nodurile cu NOT IN dintr-un câmp de referință de entitate cu mai multe valori

drapel cn

Drupal v. 9.3.8 Am folosit recent comanda entityQuery și pentru interogări mai simple nu am avut probleme. Acum trebuie să filtrez, la fel ca și pentru operatorii '=' și 'IN', și nodurile, al căror câmp multivaloric nu are valori ââsau care nu au anumite valori. Citind documentația am folosit operatorul 'NOT IN', dar cu rezultate slabe. De exemplu, interogarea ar trebui să-mi returneze nodurile care nu au valoarea 161 și 163 Aceasta este interogarea pe care am simplificat-o pentru a încerca operatorul „NOT IN”.

$nids = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->condition('type' , 'gestione' )
->notExists('field_attivita')
->condition( 'field_attivita', ['161', '163'], 'NOT IN' )
->execute();

Am încercat și cu operatorul „<>”, dar nimic de făcut

Printre diversele articole și întrebări am citit și postarea care se apropie de solicitarea mea Cum să utilizați entityQuery pentru a selecta dacă un câmp entityReference cu valori multiple nu conține id-ul dar nu pot intelege de ce nu merge

leymannx avatar
drapel ne
Ce nu este astaExistă? Ce este cu .target_id așa cum se arată în răspunsurile legate?
sonfd avatar
drapel in
Nu sunt sigur, dar nu cred că puteți face acest lucru într-o singură interogare. Cred că ar putea fi nevoie să 1. interogați pentru toți, 2. interogați pentru elementele cu ID-urile pe care nu le doriți și apoi eliminați id-urile din interogarea 2 din setul de rezultate al interogării 1. Care, de altfel, este în principiu ceea ce răspunsul legat spune.
sonfd avatar
drapel in
Cred că problema aici este modul în care sunt stocate valorile de referință ale entității - fiecare valoare dintr-un câmp cu mai multe valori primește propriul rând în tabelul db. Dacă câmpul dvs. avea cardinalitate = 1, ați putea folosi not equals pentru fiecare valoare pe care doriți să o excludeți.
drapel cn
sonfd, multumesc pentru raspuns si pentru explicatie.După cum am menționat, am abordat recent întrebări (scuze și engleza mea elementară, tot din acest motiv nu voi fi clar) Am făcut câteva teste pe baza sugestiilor dvs. și poate am înțeles ce mi-ați spus. Dar este un lucru pe care nu-l înțeleg. Am scris câteva date pentru un exemplu Poz. Câmp_activitate | $ var 1 300 | 161 2 161 | 163 3 400 | 4 163 | 5 goale | 6 200 | 7 163 | 8 goale | ...
drapel cn
dacă folosesc condiția -> condiție („conflict_activity_field”, [161, 163], „IN”) imi readuce nodurile in pozitia 2 - 4 si 7 din exemplu -> condiție („conflict_activity_field”, [161, 163], „NOT IN”) ar trebui să distrugă doar nodurile care nu conțin 161 și 163 Altfel nu am inteles ce face operatorul 'NOT IN' manualul SQL confirma asta Sunt nedumerit să fac 2 interogări și apoi diferența dintre matrice, interogarea este complexă și o mulțime de date pot încetini procesarea
drapel cn
leymannx, mulțumesc pentru răspuns, dar nu l-am primit. notExist indică dacă câmpul cu mai multe valori nu are date. target_id este nid-ul nodului

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.