# Recherche de données brutes Smart Elements

La classe Anakeen\Search\SearchElementData hérite de la Anakeen\Search\SearchElements

La différence réside dans la méthode getResult() qui retourne un tableau indexé avec les valeurs des propriétés et des Smart Field des SmartElements. Dans ce cas, seules des données brutes sont retournées.

Avertissement

Le getResult() ne retourne les résultats que si la méthode search() a été appelée avant.

# Exemple recherche de données brutes

  • Récupération de la liste des données des "dossiers"
<?php
use Anakeen\Search\SearchElementData;

$seData = new SearchElementData("DIR");
$seData->search();

$list = $seData->getResults();

foreach ($list as $seId => $smartElementData) {
  $desc = \Anakeen\Search\SearchElementData::getRawData($smartElementData, \SmartStructure\Fields\Dir::ba_desc);
  printf(
    "(%d) %s (%s)\n",
    $seId,
    $smartElementData["title"],
    $smartElementData[\SmartStructure\Fields\Dir::ba_desc] ?: "Pas de description"
  );
}

# Récupération d'une donnée SmartField brute

Le tableau retourné par getResult() est indéxé par les noms des Smart Fields et des propriétés. Si votre recherche porte sur une Smart Structure précise, les données des champs sont directement accessible par l'index. Par contre, si la recherche est multi-structure, ou si la recherche porte sur une structure qui a des enfants alors les champs spécifiques des enfants ne sont accessibles directement avec l'index. Dans ce cas, il faut utiliser la méthode \Anakeen\Search\SearchElementData::getRawData($smartElementData, $fieldId).

Exemple recherche de tous les Smart Element qui ont un smart field "ba_desc" non vide.

<?php
use Anakeen\Search\SearchElementData;

$seData = new SearchElementData();
$seData->addFilter("fieldvalues ->> 'ba_desc' is not null");
$seData->search();

$list = $seData->getResults();

foreach ($list as $docid => $doc) {
  printf(
    "(%d) %s (%s)\n",
    $docid,
    $doc["title"],
    SearchElementData::getRawData($doc, "ba_desc") ?: "Pas de description"
  );
}