Ergebnis 1 bis 9 von 9

Thema: findByGroups

  1. #1
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard findByGroups

    Hi,

    ich bräuchte alle Member einer Gruppe und hab dazu:

    PHP-Code:
    protected function countItems()
        {
            return \
    MemberModel::findByGroups(array(1)); // Gruppe id=1
        

    Leider finde ich keine Beschreibung dieser Funktion und so geht´s nicht. Kann mir jemand helfen?

    VG
    Michel

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Sieh dir einfach den Source der Funktion an, damit du heraus findest, was sie erwartet

  3. #3
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    Hi, das sagt sich so leicht, ich finde den net. Ne schöne API Doku wär halt mal was ;-)

    PS: also, ich hab die ganze Contao Installation mit Dreamweaver durchsucht und finde nur Kommentare dieser Art:

    PHP-Code:
    * @method static \Model\Collection|\CalendarModel findByGroups() 
    Und natürlich meinen Code, aber keine Implementierung dieser Methode.
    Geändert von Lengen1971 (14.07.2015 um 08:20 Uhr)

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Ja das stimmt, dachte zuerst die Methode findByGroups ist ausimplementiert, aber in Wirklichkeit ist es genau so nur eine Alias Method für findBy('groups',…)

    Insofern wird dein Vorhaben, so wie du dir das vorstellst, auch nicht funktionieren. Im Feld "groups" stehen ja die IDs der Gruppen als serialisiertes Array drin. Daher ist es auch schwierig alle Datensätze zu bekommen, die einer Gruppe zugeordnet sind.

    Du kannst höchstens sowas machen:
    PHP-Code:
    \MemberModel::findBy'groups LIKE ?''%"1"%' ); 
    (oder die Parameter mit array(…) gewrapped, bin mir jetzt nicht sicher). Damit findest du alle Member, die der Gruppe mit der ID "1" zugeordnet sind.
    Geändert von Spooky (14.07.2015 um 08:37 Uhr)

  5. #5
    Alter Contao-Hase
    Registriert seit
    04.02.2010.
    Beiträge
    1.366

    Standard

    OK, danke.
    Dann muss ich mir wohl selbst ein Merkmal erstellen und die richtigen Member zu bekommen.

    VG

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Naja, wie gesagt, mit der String Suche bekommst du's eh auch hin. Ist halt unschön, geht aber nicht anders (über die Groups von Contao).

  7. #7
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du kannst höchstens sowas machen:
    PHP-Code:
    \MemberModel::findBy'groups LIKE ?''%"1"%' ); 
    ich hab auch genau das Problem und das Beispiel oben funktioniert nicht. Habe fast alles durchprobiert und finde leider auch kein Beispiel in Contao.

    Für
    PHP-Code:
    \MemberModel::countByGroups(...); 
    funktioniert es auch nicht.

    Ich würde gerne alle Member einer Gruppe als Collection zurück bekommen...

  8. #8
    Contao-Fan
    Registriert seit
    24.02.2021.
    Beiträge
    446

    Standard

    Da die Gruppen der User und Member im User als Blob gespeichert sind, müsstest du durch alle Nutzer laufen und diese Information einsammeln:

    Hier mal ein Beispiel:

    Die Suche nach einer bestimmten Gruppe (Nach mehreren Gruppen ist es mit array_intersect möglich)
    PHP-Code:

    // Alle Nutzer holen die nicht disabled sind
    $objMembers MemberModel::findBy(["disable=''"], null, []);

    // GruppenID
    $intGroup 1;

    $arrMembersByGroup = [];

    if(
    null !== $objMembers && $objMembers->count() > 0)
    {
        while(
    $objMembers->next())
        {
            
    $objMember $objMembers->current();

            
    $arrMemberGroups StringUtil::deserialize($objMember->groups);

            
    // Nicht in Gruppe
            
    if(!\is_array($arrMemberGroups) || !\in_array($intGroup$arrMemberGroups))
            {
                continue;
            }

            
    // In array schreiben
            
    $arrMembersByGroup[] = $objMember->id;
        }
    }

    // Danach einfach jeden Member rausfiltern, wenn man damit was anfangen möchte
    // Man könnte oben auch selbst eine Collection erstellen und müsste es nicht über ein Array lösen
    foreach ($arrMembersByGroup as $intMemberID)
    {
        
    $member MemberModel::findByPk($intMemberID);
        
    // Do something

    Code ist ungetestet


    Edit: Gar nicht gemerkt, dass es ein alter Thread war auf den geantwortet wurde . Naja kann man ja für die Nachwelt hier lassen.

  9. #9
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    ja, das ist schon etwas älter hier Aber vielen Dank!

    Tatsächlich habe ich mir gestern kurz nach meinem Post einen ähnlichen Weg über

    PHP-Code:
    $members MemberModel::findAll(); 
    gesucht. Trotzdem habe ich aus dem Schnipsel noch etwas genutzt.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •