2017-06-09 5 views
2

wenn diese Abfrage auszuführen versucht, es beschwert sich:Symfony Lehre createQueryBuilder Von() alias nicht funktioniert

[2/2] QueryException: [Semantical Error] line 0, col 443 near 'User user LEFT': Error: Class 'User' is not defined.

ich wirklich weiß nicht einmal, warum ich den Alias ​​in meiner aus brauchen, aber ich hinzugefügt, um es dort und es funktioniert nicht.

Der Name Entity-Klasse ist "User"

$query = $em->createQueryBuilder() 
     ->from('User','user') 
     ->select('user.email, 
       person.givenName, 
       person.familyName, 
       contactPoint.contactInfo, 
       organization.legalName, 
       postalAddress.streetAddress1, 
       postalAddress.streetAddress2, 
       postalAddress.city, 
       postalAddress.postalCode, 
       country.name, 
       region.name') 

     ->leftJoin('person', 'WITH', "user.person_id=person.id") 
     ->leftJoin('contactPoint', 'WITH', "person.contactPoint_id=contactPoint.id") 
     ->leftJoin('organization', 'WITH', "person.organization_id=organization.id") 
     ->leftJoin('postalAddress', 'WITH', "organization.postal_address_id=postalAddress.id") 
     ->leftJoin('country', 'WITH', "postalAddress.country_id=country.id") 
     ->leftJoin('region', 'WITH', "postalAddress.region_id=region.id") 
     ->where("user.email = '$email' ") 
     ->getQuery(); 
    dump($query->getArrayResult());die(); 

//////////////////// ARBEITS QUERY AKTUALISIERT Sie

$user = $this->get('security.token_storage')->getToken()->getUser(); 

    $email = $user->getEmail(); 

    $query = $em->createQueryBuilder() 
     ->from(User::class,'user') 
     ->select('user.email, 
       person.givenName, 
       person.familyName, 
       contactPoint.contactInfo, 
       organization.legalName, 
       postalAddress.streetAddress1, 
       postalAddress.streetAddress2, 
       postalAddress.city, 
       postalAddress.postalCode, 
       country.name, 
       region.name') 

     ->leftJoin(Person::class, 'person', 'WITH', "user.accountOwner=person.id") 
     ->leftJoin(ContactPoint::class, 'contactPoint', 'WITH', "person.contactPoint=contactPoint.id") 
     ->leftJoin(Organization::class, 'organization', 'WITH', "person.organization=organization.id") 
     ->leftJoin(PostalAddress::class, 'postalAddress', 'WITH', "organization.postalAddress=postalAddress.id") 
     ->leftJoin(Country::class, 'country', 'WITH', "postalAddress.country=country.id") 
     ->leftJoin(Region::class, 'region', 'WITH', "postalAddress.region=region.id") 
     ->where("user.email = '$email' ") 
     ->getQuery(); 
    dump($query->getResult());die(); 
+0

Hier ist die Arbeits Abfrage überarbeitet – user1930591

Antwort

2

verwenden sollte den vollständig qualifizierten Klassennamen, versuchen Sie mit:

->from(User::class,'user') 

statt

->from('User','user') 

Allgemeinere, die sich auf die documentation von Symfony Lehre:

you need to think in terms of selecting PHP objects, instead of rows in a database. For this reason, you select from the AppBundle:Product entity (an optional shortcut for the AppBundle\Entity\Product class) and then alias it as p .

So sollten Sie das Feld der Klasse verwenden, anstatt den Spaltennamen der Tabelle in der DQL-Anweisung.

Hope this Hilfe

+0

durch die Hilfe tat nicht sehen, dass beispielsweise in einem der Dokumentation, seine jetzt über meine Peron klagen in der shuold, dass der Klassenname oder tatsächlichen Tisch verbindet Name? [Semantischer Fehler] Zeile 0, Spalte 484 nahe 'Person MIT LINKS': Fehler: Klasse 'Person' ist nicht definiert. – user1930591

+0

sieht so aus, als müsste ich alle meine Joins zu ClassName :: class ändern, 'alias' – user1930591

+0

Jetzt musste ich auch die ID-Spalten meiner Joins zu den Klasseneigenschaftsnamen ändern – user1930591

Verwandte Themen