Hallo,
ich weiß, es gibt bereits diverse Threads zum Thema, ich habe es auch damit schon weitgehend hinbekommen, so dass ich mir die Daten von fe_users ausgeben lassen kann, sowohl mit dem Extbase-Repository-Klasse als auch mit einer eigenen Repository-Klasse. Letztere brauche ich, weil ich die Abfrage durch diverse Parameter steuern will. Ich kann alle Felder ausgeben (habe es zunächst mit zip und pid versucht, das klappt auch), nur first_name und last_name klappt nicht.
Hier mein Mapping:
config.tx_extbase{
persistence{
enableAutomaticCacheClearing = 1
updateReferenceIndex = 0
classes{
Tx_UserAhfeuserlist_Domain_Model_Feuser {
mapping {
tableName = fe_users
recordType = Tx_Extbase_Domain_Model_FrontendUser
columns {
first_name.mapOnProperty = firstname
last_name.mapOnProperty = lastname
}}}}}}
Die Query in der eigenen Klasse:
class Tx_UserAhfeuserlist_Domain_Repository_FeuserRepository extends Tx_Extbase_Domain_Repository_FrontendUserRepository {
/**
* übersicht durch filter eingrenzen
*
*
* @return array Matched feusers
*/
public function findByZip() {
$query = $this->createQuery();
$sql = "SELECT first_name, last_name from fe_users where zip like '123'";
$query->statement($sql);
$query->getQuerySettings()->setRespectEnableFields(FALSE);
$query->getQuerySettings()->setReturnRawQueryResult(TRUE);
return $query->execute();
}
}
IN meiner Model-KLasse habe ich die Variablen mit getter angelegt und dann gelesen, dass das die Extbase schon hat, also habe ich sie wieder entfernt, beides funktioniert nicht...
Hat jemand einen Tipp für mich? Das wäre super!
okay, habe jetzt noch den Artikel von S. Froemken gefunden und meine model-Klasse angepasst, nun klappt es mit findAll(), wenn ich aber meine eigene Abfrage definiere klappt es nicht. 🙁
tja, manchmal hilft schon alleine das Posten ... 😉
ich habe meine Abfrage nun so geändert:
SELECT first_name as 'firstName',
und dann wird mir der Name ausgegeben. Das erscheint mir jetzt nicht so ganz sauber, wenn also jemand eine bessere Lösung hat - bitte!
Hallo Alisha,
ich glaube Du hast Dir da zu viel Arbeit gemacht. Schön wenn es funktioniert, aber ich kann mir schon vorstellen, dass Du mit dieser Lösung nicht gerade glücklich bist.
Warum nutzt Du nicht die Query-Methoden wie z.B.:
public function findByZip() {
$query = $this->createQuery();
$query->getQuerySettings()->setRespectEnableFields(FALSE);
return $query->matching($query->like('zip', '123%'))->execute(TRUE);
}
Das mit Deinem SELECT würde auch funktionieren, aber Du fragst überhaupt nicht die uid ab. Ändere Dein Statement mal in:
SELECT uid, pid, first_name, last_name FROM fe_users WHERE zip like '123%';
Auch das mit diesem Mapping brauchst Du doch gar nicht:
first_name.mapOnProperty = firstname
last_name.mapOnProperty = lastname
Diese Eigenschaften sind in dem Model von Extbase bereits enthalten und fertig einsetzbar?!
Ich sehe, dass Du Dein eigenes Repository verwendest. Das ist kein Problem und Du hast es ja auch schon richtig von dem mitgelieferten Repository aus Extbase erweitert. Dann mach das bitte auch für Dein Model:
class Tx_MyExt_Domain_Model_FeUser extends Tx_Extbase_Domain_Model_FrontendUser
Wichtig: Halte Model und Repository immer synchron: Verwendest Du direkt das FrontendUserRepository von Extbase, dann musst Du auch das Model von Extbase verwenden. Verwendest Du wie in Deinem Beispiel ein eigenes Repository, dass das von Extbase erbt/erweitert, dann MUSST Du auch ein eigenes Model erzeugen, dass von dem Model aus Extbase erbt. Auch wenn Du da überhaupt keine weiteren Eigenschaften definiert hast.
Stefan