在学说2中索引外键以优化查询



顾问实体

<?php        
        namespace Entity;
        /**
         * @Entity
         * @Table(name="consultant")
         */
        class Consultant{    
          /**
           * @Id
           * @Column(type="integer", nullable=false)
           * @GeneratedValue(strategy="AUTO")
           */
          protected $id;
          /**
         * Get id
         *
         * @return integer
         */
        public function getId()
        {
            return $this->id;
        }
      }

Paitent Entity

      <?php
        namespace Entity;
        /**
         * @Entity
         * @Table(name="patient")
         */
        class Patient{

          /**
           * @Id
           * @Column(type="integer", nullable=false)
           * @GeneratedValue(strategy="AUTO")
           */
          protected $id;
          /**
      * Many Patients belogns to a single consultant.
      * @ManyToOne(targetEntity="consultant")
      * @JoinColumn(name="consultant_id", referencedColumnName="id", nullable=false)
      */
      private $consultant;
      /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set consultant
     *
     * @param Entityconsultant $consultant
     *
     * @return Patient
     */
    public function setConsultant(Entityconsultant $consultant)
    {
        $this->consultant = $consultant;
        $consultant->addPatient($this);
        return $this;
    }
    /**
     * Get consultant
     *
     * @return Entityconsultant
     */
    public function getConsultant()
    {
        return $this->consultant;
    }
 }

查询构建器

$qb = $this->em->createQueryBuilder();
      $qb
        ->select('p')
        ->from('EntityConsultant', 'c')
        ->innerJoin('EntityPatient', 'p', 'c.id = p.consultant_id')
        ->where('c.id = ?1')               
        ->setParameter(1, 1)        
        $query = $qb->getQuery();
        $results = $query->getResult();

问题

我需要让所有属于特定顾问的患者,目前我正在使用上述查询构建器查询。如果是,该如何在学说2中进行?而且还欢迎其他任何优化技术。

学说会自动在外键字段上创建索引,因此无需尝试手动添加一个索引。同样,要使所有属于顾问的患者都不需要加入,如问题所示,可以使用更简单的查询,如下所述。

新查询

$qb = $this->em->createQueryBuilder();
       $qb
          ->select('p.name')
          ->from('EntityPatient', 'p')        
          ->where('p.consultant = ?1')
          ->setParameter(1, 1);

相关内容

  • 没有找到相关文章

最新更新