2017-08-23 2 views
-1

Ich bin ein Neuling in Symfony und möchte einige Hinweise zum Erstellen einer Abfrage Builder-Anweisung. Ist ziemlich einfach, ist die Idee, die Daten von einer dritten Entität zu erhalten.symfony create query builder

Ich habe die Entitäten:

/** 
* Entity 
* @ORM\Entity(repositoryClass="LoungepassBundle\Entity\LoungepassRepository") 
* @ORM\Table(name="loungepass_loungepass") 
* 
*/ 

class Loungepass{ 

    /** 
    * @ORM\Column(type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

// ... 

/** 
    * @ORM\ManyToOne(targetEntity="\AppBundle\Entity\Agency", inversedBy="loungepasses") 
    * @ORM\JoinColumn(name="agency_id", referencedColumnName="iata8", nullable=false) 
    */ 
    private $agency; 

//... 

} 

Agentur Entity

class Agency { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="string", length=8, name="iata8") 
    */ 
    protected $id; 

//... 

    /** 
    * @ORM\OneToMany(targetEntity="LoungepassBundle\Entity\Loungepass", mappedBy="agency") 
    */ 
    protected $loungepasses; 

    /** 
    * @var Market 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Market") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="sales_country", referencedColumnName="id") 
    * }) 
    */ 
    private $market; 

//... 
} 

Ich möchte eine Abfrage tun, wie folgt aus:

public function queryBySlugInContext($slug, $user) { 

    $query = $this->createQueryBuilder("l") 
    ->where('l.slug = :slug') 
    ->setParameter('slug', $slug); 

    if(count($user->getAgencies()) > 0){ 
     $query->andWhere(':agencyIds MEMBER OF l.agencies') 
     ->setParameter('agencyIds',$user->getAgencies()); 
    } 

Lage, die Informationen aus den Zugriff auf Marktattribut, das sich in der Agentur-Entität befindet. Rufen Sie im Grunde Informationen von der Markteinheit ab.

irgendwelche Vorschläge? Vielen Dank im Voraus

Antwort

-1

ich ein wenig Code geändert, aber der Geist ist hier

Wenn Sie Zugriff auf Daten aus anderen Tabellen im Auge behalten nur abrufen differents verwenden mysql mit Lehre

zugänglich beitreten
public function queryBySlugInContext($slug, $user) { 

    $query = $this->createQueryBuilder("l") 
    ->where('l.slug = :slug') 
    ->setParameter('slug', $slug); 
if(0 !== count($user->getAgencies())) { 
    $query = $query->innerJoin('l.agency', 'a') 
        ->andWhere('a.id IN(:userAgenciesIds)') 
        ->setParameter('userAgenciesIds', array_map(function(Agency $agency) { 
         return $agency->getId(); 
        }, $user->getAgencies()); 
} 

sollten Sie eine Zeit dauern, die Lehre Sie @Mcsky query builder documentation

+0

Vielen einige Inhalte im Internet wie zum Beispiel zu lesen, ja las ich in verschiedenen Websites, aber es war immer noch schwierig für mich zu verstehen. Können Sie mir helfen, die Abfrage zu erstellen, um die Daten aus der dritten Tabelle abzurufen, oder einige Links, die mir helfen können. Danke – andreahg

+0

warum brauche ich eine array_map und die Funktion, in dieser Funktion kann ich auch die Märkte, $ agency-> getMarkets() aufrufen? – andreahg

+0

"schwer zu verstehen" war nicht das richtige Wort, ich möchte Dokumentation oder Beispiele, um Daten aus verschiedenen Tabellen abrufen – andreahg