2016-08-10 7 views
2

ist es irgendwie möglich, ein Array mit Doctrine Array zu bekommen?Symfony Doctrine Land als Array

In diesem Beispiel möchte ich, dass das Land ein Array sein sollte.

$user['country']['name'] 

or 

$user['country']['cid'] 

die aktuelle Anforderung von mir:

$query = $this->createQueryBuilder('u') 
     ->select('u') 
     ->getQuery(); 
    return $query->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); 

erhalte ich nur die Id hier ist.

Lehre Entities mit yml:

Benutzer:

TestBundle\Entity\User: 
    type: entity 
    table: user 
    repositoryClass: TestBundle\Entity\UserRepository 
    id: 
     uid: 
      type: integer 
      nullable: false 
      unsigned: true 
      id: true 
      generator: 
       strategy: IDENTITY 
    fields: 
     firstname: 
      type: string 
      nullable: true 
      length: 255 
      fixed: false 
     lastname: 
      type: string 
      nullable: true 
      length: 255 
      fixed: false 
     email: 
      type: string 
      nullable: true 
      length: 255 
      fixed: false 
    oneToOne: 
     country: 
      targetEntity: Country 
      joinColumn: 
       name: country 
       referencedColumnName: cid 
    lifecycleCallbacks: { } 

Land:

TestBundle\Entity\Country: 
    type: entity 
    table: country 
    repositoryClass: TestBundle\Entity\CountryRepository 
    id: 
     cid: 
      type: integer 
      nullable: false 
      unsigned: false 
      id: true 
      generator: 
       strategy: IDENTITY 
    fields: 
     cid: 
      type: integer 
      nullable: true 
      unsigned: false 
      options: 
       default: 0 
     name: 
      type: string 
      nullable: true 
      length: 255 
      fixed: false 
    lifecycleCallbacks: { } 

Es ist auf Geschwindigkeit in meinem Beispiel hängt, weil ich rund 10 000 Objekt haben.

Ein andere Lösung wäre, ist ein SQL-Statement, mit vielen „Joins“ weil dieses Beispiel oben schreiben einem einzigen zu verkürzen, ich habe um 7 diese Spalten, wie „Gruppe“ usw.

Antwort

1

Anstatt ein Array zu hydratisieren, können Sie einfach Objekte verwenden. Dann können Sie auf die Attribute Country über die Getter zugreifen, die Sie in Ihrer Modellklasse definiert haben sollten. Wenn Sie wirklich ein Array benötigen, könnten Sie PHP verwenden, um sie zu füllen.

Aber wenn Sie wirklich Geschwindigkeit brauchen, sollten Sie in der Tat erwägen, eine rohe select-Anweisung zu verwenden, die - unabhängig von der Komplexität - viel besser optimiert werden kann als Doctrine.

+0

Hat das geholfen? Oder ist da noch etwas offen mit deiner Frage? –

Verwandte Themen