【问题标题】:Create a Query using QueryBuilder with a Many-to-Many relation in ZF2 and Doctrine在 ZF2 和 Doctrine 中使用具有多对多关系的 QueryBuilder 创建查询
【发布时间】:2015-11-24 16:39:53
【问题描述】:

用户信息:

namespace Module\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\Stdlib\Hydrator;

/**
 * Info
 *
 * @ORM\Table(name="user_info")
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\Entity(repositoryClass="Module\Entity\InfoRepository")
 */
class Info
{
    /**
     * @var ArrayCollection $champions
     *
     * @ORM\ManyToMany(targetEntity="Module\Entity\Champion", inversedBy="infos")
     */
    private $champions;
}

冠军:

namespace Module\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\Stdlib\Hydrator;

/**
 * Champion
 *
 * @ORM\Table(name="champion")
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\Entity(repositoryClass="Module\Entity\ChampionRepository")
 */
class Champion
{
    /**
     * @var ArrayCollection $infos
     *
     * @ORM\ManyToMany(targetEntity="Module\Entity\Info", mappedBy="champions")
     */
    private $infos;
}

此代码有效并在数据库中创建了一个表info_champion

我只想使用教义QueryBuilder 选择包含与某个特定英雄的关系的信息,例如以下 SQL 查询:

SELECT i.* FROM `user_info` AS i 
  LEFT JOIN info_champion ic ON ic.info_id = i.id 
  WHERE ic.champion_id = 2;

【问题讨论】:

    标签: php doctrine-orm zend-framework2 many-to-many query-builder


    【解决方案1】:

    在您的用户信息存储库中:

    $queryBuilder = $this->createQueryBuilder('i')
        ->addSelect('ic') //only needed if you want to fetch join...
        ->innerJoin('i.champions', 'ic')
        ->where('ic.id = :champion_id')
        ->setParameter('champion_id', 2);
    
    $query = $queryBuilder->getQuery();
    
    return $query->getResult();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多