Hallo TYPO3-Freunde,
ich habe 2 Tabellen Adressen und Personen. die Personen sind den Adressen zugeordnet.
Wenn ich alle Adressen aus der Tabelle holen möchte mache ich dies mit.
$adressen = $this->adressenRepository->findAll();
Jetzt ist es so das die Adressen Alphabetisch sortiert werden sollen nach Straßennamen dies ist kein Problem ich habe im Repo. einfach ein
protected $defaultOrderings = array('name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING);
gesetzt.
Nun ist es aber so, dass die Personen manuell sortiert werden sollen und ich dachte das könnte ich mittels:
protected $defaultOrderings = array('name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING, 'tx_myext_domain_model_personen.sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING);
erschlagen, aber ich bekomme nur ein propertyMap Fehler.
Was mache ich falsch oder geht es so garnicht?
Vielen Dank schon mal im Voraus.
Gruß typonewbe
Hi, ist der protected $sorting; im Model/Personen.php vorhanden?
Hallo silverstallion,
danke für die Info nein natürlich nicht, da ich davon ausging, das sorting (in sql und tca vorhanden) in das Prinzip TYPO3 Standard fällt es gibt ja auch keine setUid und getUid.
Aber ich teste es gleich aus.
Gruß typonewbe
Ja stimmt. Sorry, das wird leider überhaupt nichts bewirken, aber versuch mal das sorting Ordering im PersonRepository.php zu deklarieren:
protected $defaultOrderings = array('sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface:😮RDER_ASCENDING);
Tut mir leid bin nur am Anfang im Extbase, aber ich würde es so versuchen.
Hallo,
nein hat leider nicht funktioniert. Ich denke das Problem liegt daran, das er nur innerhalb seines Repos./Model bleibt und kein wirkliches Join im Hintergrund macht. Somit kennt er das andere Model/Repo. nicht und sortiert folglich nicht danach.
Ich versuche das anders zu lösen und wandle das Objekt in nen Array um.
Gruß typonewbe
Ok, vielleicht ein letztes mal.
Ich hab' in der extension blog_example nachgeschaut, da gibts einen ähnlichen Beispiel mit tags.
TCA:
'tags' => array(
'exclude' => 1,
'label' => 'LLL:EXT:blog_example/Resources/Private/Language/locallang_db.xml:tx_blogexample_domain_model_post.tags',
'config' => array(
'type' => 'inline',
'foreign_table' => 'tx_blogexample_domain_model_tag',
'MM' => 'tx_blogexample_post_tag_mm',
'maxitems' => 9999,
'appearance' => array(
'useCombination' => 1,
'useSortable' => 1,
'collapseAll' => 1,
'expandSingle' => 1,
)
)
),
PostRepository:
/**
* Finds posts by the specified tag and blog
*
* @param string $tag
* @param Tx_BlogExample_Domain_Model_Blog $blog The blog the post must refer to
* @return Tx_Extbase_Persistence_QueryResultInterface The posts
*/
public function findByTagAndBlog($tag, Tx_BlogExample_Domain_Model_Blog $blog) {
$query = $this->createQuery();
return $query
->matching(
$query->logicalAnd(
$query->equals('blog', $blog),
$query->equals('tags.name', $tag)
)
)
->execute();
}
Da müsste man die Query-Methode selbst schreiben. Und mit $query->setOrderings(array('person.sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface:😮RDER_ASCENDING)); mit dazu ergänzen
Hi,
danke für die Info das ist ähnlich aber leider nicht ganz was ich brauchte hatte ich auch schon gefunden. Danke dennoch.
Ich habe es jetzt so gelöst:
im Adressen Repo.
protected $defaultOrderings = array('name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING);
im Personen Repo.
protected $defaultOrderings = array('sorting' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING);
dann im Adressen Repo. eine eigene Funktion geschrieben:
public function findAllSortedByPersonenManually() {
$query = $this->createQuery();
$query->getQuerySettings()->setReturnRawQueryResult(TRUE);
$localResult = $query->execute();
$globalResult = array();
if(!empty($localResult)) {
foreach($localResult as $lResult) {
$globalResult[] = array('uid' => $lResult['uid'],
'name' => $lResult['name'],
'personen' => $this->personenRepository->findByAdressen($lResult['uid'])
);
}
}
return $globalResult;
}
Somit sortiert er die Adressen nach name und die Personen darin nach sorting.
Und ja fluid kann es ab wenn man in einem Array ein personen object reinpackt 🙂
Gruß typonewbe