Ankündigung

Einklappen
Keine Ankündigung bisher.

Doctrine WHERE condition in Join table

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Doctrine WHERE condition in Join table

    Guten Morgen allerseits,

    als Grundlage meiner Frage möchte ich ein Symfony Projekt nehmen. Eventuell einfach das populäre Blog-Beispiel.

    Der Blog hat mehrere Einträge und ein Eintrag hat jeweils einen Benutzer als Autor/Besitzer. Ein Benutzer hat eine Eigenschaft "enabled", mit welcher ein Benutzeraccount eben gesperrt oder aktiviert werden kann.

    Ich möchte jetzt nur die Blog-Einträge angezeigt bekommen, dessen Benutzer auch aktiv sind. Somit sollen die Blogeinträge auch automatisch aus der Anzeige verschwinden, wenn ich einen Benutzer lösche.

    Die Blogeinträge kann ich abfragen mit:
    "SELECT e FROM BlogBundle:Entry e"

    Nun war meine Idee:
    "SELECT e FROM BlogBundle:Entry e WHERE e.user.enabled = 1"

    Was aber leider folgenden Fehler wirft: "[...]Entry has no field or association named user.username"


    So lange arbeite ich noch gar nicht mit der DQL, ich komme leider nicht so recht auf einen möglichen Lösungsweg außer blind zu probieren.. "SELECT u, e, ... " (u -> User) ... aber das kommt mir etwas komisch vor

    Freue mich auf Hinweise!

  • #2
    D2 arbeitet standartmäßig mit Lazy-Loading. Das heißt es werden Many-To-Many und One-To-Many erst geladen, wenn du vom Code aus versuchst darauf zuzugreifen.

    Wie das bei Many-To-One läuft weiß ich nicht genau. Wenn wir aber davon ausgehen, dass es dort auch so ist, sind die Informationen die du dort versuchst vom Entry zu holen noch garnicht da.

    Ich würde es mit einem klassischen JOIN versuchen.

    PHP-Code:
      $query $em->createQuery("SELECT u FROM CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE :foo"); 
    Direkt von der DQL-Beispielseite: http://doctrine-orm.readthedocs.org/...-language.html
    Zitat von derwunner
    "Ein FISI ist auf gut-deutsch der Netzwerker. Das heißt Du gehst rauß zum Kunden oder auf die Straße und verlegst Leitungen" - derwunner 2015

    Kommentar


    • #3
      Ich bin jetzt nicht ganz der Fachmann aber ich glaube (hoffe, vermute, ...),
      dass es mit so einem Konstrukt hier evtl. klappen könnte ? :
      Hatte mal irgendwo so einen ähnlichen Fall mit freigeschalteten Benutzern und entsprechenden anderen Entities... kann mich aber nicht mehr ganz klar dran erinnern .. :/

      PHP-Code:
      SELECT e
      FROM BlogBundle
      :Entry e
      JOIN e
      .user u
      WHERE u
      .enabled true

      Kommentar


      • #4
        Hallöchen,

        ich danke euch beiden! Daraus lässt sich auf jeden Fall eine Lösung für mein Problem konstruieren

        Sonnige Grüße

        Kommentar

        Lädt...
        X