symfony创建查询生成器

时间:2017-08-23 18:36:19

标签: sql symfony query-builder

我是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 个答案:

答案 0 :(得分:-1)

我修改了一下你的代码,但心灵就在这里

当你必须访问从其他表中检索数据时,请记住使用不同的mysql join可以使用doctrine

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