Codul sună a executa()
asupra obiectului returnat de la $query->andConditionGroup()
, dar acel obiect nu implementează niciunul a executa()
metodă.
Modul corect de utilizare andConditionGroup()
este prezentat în QueryBase::andConditionGroup()
.
$interogare = \Drupal::entityQuery('desen');
$grup = $interogare->andConditionGroup()
->condition('figures.color', 'red')
->condition('figures.shape', 'triunghi');
$interogare->conditie($grup);
$grup = $interogare->andConditionGroup()
->condition('figuri.culoare', 'albastru')
->condition('figures.shape', 'cerc');
$interogare->conditie($grup);
$entity_ids = $query->execute();
În cazul dvs., folosind andConditionGroup()
nu este necesar, deoarece interogarea executată de acel cod returnează toate nodurile pentru care:
- Tipul de conținut este nivelul 3
- Titlul este
$nume_fișier
- Starea este 0
Nu returnează toate nodurile pentru care cel puțin una dintre aceste condiții este adevărată. Este similar cu ceea ce face următorul cod, care returnează toate pagină noduri unde valoarea de field_some_field este mai mare de 14.
$interogare = \Drupal::entityQuery('nod')
->condition('tip', 'pagina')
->condition('câmp_un_câmp', 14, '>');
$rezultate = $interogare->execute();
$query->execute()
returnează o serie de ID-uri de entități, nu o entitate sau o matrice de entități. $nids = $query->execute(); $nids->setPublished(TRUE)->save();
este încă greșit, deoarece o matrice nu implementează setPublished()
metodă.
Dată o serie de ID-uri de noduri $nids
, codul corect pentru a încărca nodurile este următorul.
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(array_values($nids));
$noduri
va conține o serie de entități. Publicarea acestora se poate realiza cu următorul cod.
foreach ($noduri ca $nod) {
$nod->setPublished(TRUE)->save();
}
Obiectul s-a întors de la \Drupal::entityQuery()
verifică că utilizatorul conectat în prezent are acces de vizualizare la nodurile returnate. În majoritatea cazurilor, utilizatorul nu are acces la noduri nepublicate. Pentru a evita ca interogarea returnează numai nodurile pe care utilizatorul conectat în prezent le poate vizualiza, este necesar să le apelați $query->accessCheck(FALSE)
, ca în $interogare = \Drupal::entityQuery('nod')->checkAccess(FALSE);
În plus, cel există('nid')
apelul nu este necesar, deoarece ID-ul nodului este întotdeauna salvat pentru noduri.
Lăsând bucla pe $i_selectat
, codul pe care l-aș folosi este următorul.
$interogare = \Drupal::entityQuery('nod')->checkAccess(FALSE);
$nids = $query->condition('tip', 'nivel3')
->condition('titlu', $file_name)
->condition('stare', '0')
->execute();
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(array_values($nids));
foreach ($noduri ca $nod) {
$nod->setPublished(TRUE)->save();
}