在 ZF2 和 Doctrine 中使用具有多对多关系的 QueryBuilder 创建查询
Create a Query using QueryBuilder with a Many-to-Many relation in ZF2 and Doctrine
用户信息:
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;
}
此代码有效并在数据库中创建了 table info_champion
。
我只想 select 包含与某些特定冠军使用学说 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;
在您的用户信息库中:
$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();
用户信息:
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;
}
此代码有效并在数据库中创建了 table info_champion
。
我只想 select 包含与某些特定冠军使用学说 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;
在您的用户信息库中:
$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();