繁体   English   中英

Symfony:使用QueryBuilder的加入请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM