首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Symfony和Doctrine中对两个实体进行连接?

如何在Symfony和Doctrine中对两个实体进行连接?
EN

Stack Overflow用户
提问于 2016-11-08 19:06:13
回答 1查看 952关注 0票数 0

我有一个select查询,我正在尝试向它添加一个联接。

在下面的示例中,我有一个Question实体,用于返回一些结果,我想添加一个与User实体的联接,例如:

SELECT question FROM question AS q LEFT JOIN USER u ON q.user_id= u.id;

我希望结果是User实体中的Question实体,如下所示:

代码语言:javascript
运行
复制
private Question (entity)
private id
private user_id
private User (entity)
    private id
    private name

这是我的班

代码语言:javascript
运行
复制
namespace AppBundle\Repository;

use AppBundle\Entity\User;
use AppBundle\Entity\Question;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Tools\Pagination\Paginator;

class QuestionRepository extends EntityRepository
{

    /**
     * @param int $currentPage
     *
     * @return Paginator
     */
    public function getQuestions($currentPage = 1)
    {
        $questions = $this->createQueryBuilder('question')
            ->where('question.active is NULL')
            ->getQuery();

        $paginator = $this->paginate($questions, $currentPage);

        return $paginator;
    }
}

我这样叫它

代码语言:javascript
运行
复制
$questionRepo = $this->container->get('doctrine')->getManager()->getRepository('AppBundle:Question');
$questions    = $questionRepo->getQuestions(1);

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-11-08 23:00:07

怎么说呢:

代码语言:javascript
运行
复制
$questions = $this->createQueryBuilder('question')
    ->leftJoin('question.user', 'question_user', 'WITH', 'question_user.user = :user_id')
    ->where('question.active is NULL')
    ->setParameter('user_id', $user_id)
    ->getQuery();

$paginator = $this->paginate($questions, $currentPage);

编辑:由于你最近的评论,我不得不提到,这个建议是假设你的Question实体看起来像这样(根据User的实体:

代码语言:javascript
运行
复制
/**
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="question")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;

如果没有,请添加此内容,生成实体(php app/console doctrine:generate:entities AppBundle:Question)和更新DB (php app/console doctrine:schema:update --force)。

PS:在生成实体之前,您必须删除旧的getter/setter。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40494599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档