it-swarm-eu.dev

Jak sestavíte dotaz, abyste získali řadu uzlů a jejich hodnot polí filtrovaných podle hodnot polí?

Doufejme, že někdo s Drupal 7 zkušeností mě může nasměrovat správným směrem.

Vytvářím vlastní modul pro dotazování některých uzlů a skupin a jejich řazení podle hodnot polí.

Snažil jsem se používat pohledy, ale zdá se, že není možné získat výsledky ve formátu, který potřebuji, takže jsem se rozhodl přímo dotazovat databázi a sestavit svůj vlastní výstup.

Jaký je nejjednodušší způsob dotazování uzlů v Drupal 7, když si všimnu, že nyní existuje tabulka pro každé pole, která by zřejmě vyvolala jakýkoli dotaz, který musím napsat extrémně složitý?

Existují nějaké metody dotazování dat uzlu a filtrování/seskupení výsledků, nebo to lze provést pouze pomocí surového SQL.

Pokud to druhé můžete mi ukázat příklad dotazu, který obsahuje Drupal 7 hodnoty pole?

6
Camsoft

Podpořil jsem Jeremyho návrh, aby se s názory snažil víc. Pokud však absolutně musíte napsat dotaz přímo v kódu, budete chtít použít EntityFieldQuery .

Například pro získání počtu všech uzlů s hodnotou textového pole 'foo':

// Get field information
$field = field_info_field('field_name');
$query = new EntityFieldQuery;
$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'NODE TYPE')
  ->fieldCondition($field, 'value', 'foo')
  ->count();

$count = $query->execute();

Pokud nechcete počítat, ale místo toho výsledky, byste opustili část počítání a načíst výsledky:

foreach ($query->execute() as $entity_type => $entities) {
  foreach ($entities as $entity_id => $entity) {
  ...
  }
}

The Commerce Guys mají také dobrý blogový příspěvek popisující jednoduchý případ použití.

12
jhedstrom

Snažil jsem se používat pohledy, ale zdá se, že není možné získat výsledky ve formátu, který potřebuji, takže jsem se rozhodl přímo dotazovat databázi a sestavit svůj vlastní výstup.

Mým prvním návrhem by bylo zkusit tvrději s názory.

Jaký je nejjednodušší způsob dotazování uzlů v Drupal 7, když si všimnu, že nyní existuje tabulka pro každé pole, která by zřejmě vyvolala jakýkoli dotaz, který musím napsat extrémně složitý?

Ano, bylo by to, a proto jsem předložil první návrh.

Jedním tipem by mohlo být použití pohledu k provedení dotazu, ale vytvoření vlastního výstupu pomocí programového vyvolání pohledu.

Druhým tipem by bylo použití dotazu, který je generován pohledy, jako počátečního bodu.

Pole v drupal 7 jsou definována pomocí pole api. Takže byste se měli podívat do toho, abyste zjistili, jak jsou pole uložena, a pomoci vám definovat váš dotaz. Lze to udělat, ale není jednoduché.

1
Jeremy French