HalliHallo,
genau weiß ich nicht, ob das Thema hierher gehört, es könnte eher mit PHP allgemein zu tun haben. Dennoch hat es mit Extbase-Programmierung zu tun.
Sachlage:
Ich habe ein Model Friendlist erstellt und die Tabelle fe_users entsprechend erweitert.
Es gibt eine Relation von FrontendUser zu Friendlist - ein Tx_Extbase_Persistence_ObjectStorage sozusagen, welches im FrontendUser-Model auch auftaucht.
Nun will ich einfach wissen, ob ein angemeldeter Benutzer und ein anzuzeigender Benutzer diese Friendlist-Relation haben. Dazu habe ich im FrontendUser-Model folgende Methode:
/**
* checks, if the given user is in friendlist of this user
*
* @param Tx_Extension_Domain_Model_FrontendUser $frontendUserToCheck
* @return void
*/
public function getUserIsInFriendlist(Tx_Extension_Domain_Model_FrontendUser $frontendUserToCheck) {
if (count($this->friendlist)) {
foreach ($this->friendlist as $friend) {
if ($friend->getFriendFrontendUser() && $friend->getFriendFrontendUser()->getUid() == $frontendUserToCheck->getUid()) return true;
}
}
return false;
}
Das funktioniert auch soweit ganz gut. Ich frage mich nur, ob man diese foreach-Schleife nicht vereinfachen kann. Wenn ich mir vorstelle, dass z. B. 20 Benutzer angezeigt werden sollen, jeder Benutzer z. B. 100 Leute in der Friendlist haben, dann iteriert diese Schleife maximal 2000 Mal. Das erscheint mir unnötig das per foreach zu machen.
Alternativ könnte ich das Repository befragen, welches aber auch Ressourcen verbraucht:
$friendlist = $this->friendlistRepository->findByFrontendUserAndFriendFrontendUser($targetFrontendUser, $currentFrontendUser);
if (count($friendlist)) { // user is in friendlist }
Gibt es so etwas wie "in_array()" auch für Objekte?
z. B.:
if (in_object($frontendUser, $friendlistObjectStorage)) {}
Das "friendlistObjectStorage" in ein Array umzuwandeln ist wohl genauso sinnlos, da ich dabei wieder über das gesamte ObjectStorage iterieren müsste, um einen Vergleichswert (entweder als Array-Key oder Wert zu speichern).
Wie löst ihr das Problem, wenn ihr wissen wollt, ob ein Model-Object in einem Storage-Object vorhanden ist?
Vielen Dank für Tipps und Verbesserungsvorschläge.
LG sun