[英]Symfony: join request using QueryBuilder
我有一个包含2个表的数据库模型:用户和实验。 关系是n:n,所以我用两个外键创建了第三个表。
| 实验 1 ------- 0..n | ExperimentationUser | 0..n ------- 1 |用户|
实体的产生要归功于Doctrine(带有注释)。 我有UserEntity和ExperimentationEntity,但没有ExperimentationUserEntity。 当我查看USerEntity时,可以找到“相关实验ID”的集合。
我想获取指定用户的所有实验名称(而非ID)。 在普通的SQL中,我将使用WHERE子句(用于用户ID选择)将Experimentation and ExperimentationUser加入。 但是,由于我正在启动一个Symfony(2.8)项目,因此我想使用QueryBuilder。
我不熟悉语法,也不知道如何实现。 我试过的
$repository = $this->getDoctrine()->getRepository('AppBundle:Experimentation');
$query = $repository->createQueryBuilder('e')
->join('...')
->setParameter('id',$id)
->getQuery();
但是我不知道在join
子句中放什么。 我什至不确定我是否需要它。
谢谢你的帮助!
这就是我做这种事情的方式。 我不使用查询生成器,但您可以理解。
在实体中
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Experimentation
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AppBundle\Entity\ExperimentationRepository")
*/
class Experimentation
{
//...
}
在存储库类中
namespace AppBundle\Entity;
use Doctrine\ORM\EntityRepository;
class ExperimentationRepository extends EntityRepository
{
public function getExperimentationByUser($id) {
$em = $this->getEntityManager();
$query = $em->createQuery('SELECT e '
. 'FROM AppBundle:Experimentation e '
. 'JOIN e.experimentationUsers eu '
. 'JOIN eu.user u '
. 'WHERE u.id = :id ')
->setParameter('id', $id);
return $query->getResult();
}
}
然后在控制器中
//..
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('AppBundle:Experimentation')->getExperimentationByUser($user_id);
//..
这样,您可以获取实验列表a,然后获取其名称,或者在查询中仅输入$query = $em->createQuery('SELECT e.name '
。如果还需要与用户相关的数据,则可以输入$query = $em->createQuery('SELECT e, u '
,可能可以保存一些数据库请求。
希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.