2017-08-23 31 views
-1

我是symfony的新手,我想创建一个查询生成器语句的建议。非常简单,这个想法是从第三个实体获取数据。symfony创建查询生成器

我有实体:

/** 
* 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; 

//... 

} 

机构实体

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; 

//... 
} 

我愿做一个查询,如:

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()); 
    } 

能够从访问信息市场属性位于代理实体中。基本上,从市场实体中检索信息。

有什么建议吗? 预先感谢您

回答

-1

我修改了一下你的代码,但头脑这里

当你进入到检索其他表中的数据一定要记住用型动物MySQL的加入教义访问

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()); 
} 

你应该花时间阅读例如像学说query builder documentation

+0

谢谢@Mcsky,是的,我在不同的网站上阅读互联网上的一些内容,但仍是对我来说很难理解。你能帮我建立查询,从第三张表中获取数据,或者一些可以帮助我的链接。谢谢 – andreahg

+0

为什么我需要一个array_map和函数,在那个函数中我也可以调用市场,$ agency-> getMarkets()? “难以理解”的 – andreahg

+0

不是合适的词,我希望文档或示例从不同的表中检索数据 – andreahg