getSelectFields() in oxsearch liefert nicht alle erwarteten Felder

Hi,

in der oxsearch.php gibt es die Funktion _getSearchSelect().
In dieser Funktion wird folgendes aufgerufen:

$sSelectFields = $oArticle->getSelectFields();
(Um die select Felder für das SQL zu bekommen)

Leider liefert die Funktion nicht immer alle Felder. Manchmal bekomme ich nur “oxid” und wenn ich mehrere Felder bekomme fehlen auch einige, wie zum Beispiel “oxmpn”. (Die selber in der oxarticles Tabelle angelegten Spalten sind auch nur teilweise im Rückgabewert der Funktion enthalten).

Hat jemand eine Ahnung woran das liegt?

prüfe mal, ob dein $oArticle wirklich ein oxArticle ist.
Bei oxBase wäre die Rückgabe z.B. nur “oxid”.

Wenn ich mich richtig erinnere, zieht die Funktion die Felder standardmäßig aus der View und nicht direkt aus der Tabelle. Hast du die Views nach dem Hinzufügen eigener Felder aktualisiert? Oder versuch mal mit getSelectFields(true); dann sollte er die Tabelle anstatt der View nehmen

Daher kommt ab und an mal nur oxid an.

Die Views sind aktualisiert. Trotzdem scheint er nicht alle Felder aus der View zu nehmen. Zum Beispiel fehlt oxmpn und auch ein paar eigene aber nicht alle. Leider kann ich auch nicht feststellen nach welchen Prinzip er aussortiert hat. In der view sind die Felder aber vorhanden. Habe ich nachgeschaut.

Kann es vielleicht sein das er die Felder auf 30 beschränkt (Die Rückgabe enthält nur 30 Felder)? getSelectFields(true) liefert leider die selben Felder. wie wenn ich true weglassen würde.

P.s. ganz vergessen es ist Community Edition 4.8.1 die benutzt wird.

Ok nach langem Durchforsten des Codes bin ich ein Stück weiter. Es hat mit lazy loading zu tun. Dadurch werden nicht alle Felder geladen.
Wie kann ich dieses Verhalten beeinflussen, um die “oxmpn” im getSelectFields() Rückgabewert zu erhalten?

Da ich keine andere Lösung gefunden habe hab ich mir jetzt so beholfen:

$sSelectFields = $oArticle->getSelectFields();

if (strpos($sSelectFields, "$sArticleTable.oxmpn") === FALSE) {
    $sSelectFields .= ", $sArticleTable.oxmpn";
}

wenn du sowieso nur oxmpn brauchst, wozu dann noch getSelectFields()?

alternativ, mit

$oDb = oxDb::getDb();
$oRs = $oDb->metaColumnNames( "oxv_oxarticles_de" );
var_dump($oRs);

bekommst du alle Felder der Tabelle/View

/tmp geleert? Die Felder werden gecached.

@vanilla thunder das feld brauche ich zusätzlich. aber danke für die alternative :slight_smile:
@leofonic jap hab ich.