如何在Symfony和Doctrine中的两个实体上进行连接?
问题描述:
我有一个选择查询,我试图给它添加一个连接。如何在Symfony和Doctrine中的两个实体上进行连接?
在下面的例子,我有我使用返回一些结果Question
实体,我想补充与User
实体加盟,如:
SELECT question FROM question AS q LEFT JOIN USER u ON q.user_id= u.id;
我想结果是一个Question
实体内User
实体,是这样的:
private Question (entity)
private id
private user_id
private User (entity)
private id
private name
这里是我的
类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;
}
}
我这样称呼它
$questionRepo = $this->container->get('doctrine')->getManager()->getRepository('AppBundle:Question');
$questions = $questionRepo->getQuestions(1);
任何想法?
答
怎么样:
$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);
编辑:因为你的最新评论,我不得不提,这个建议是假设这样的(根据User
的实体,您的Question
实体的样子:
/**
* @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。
我在'question_user'附近得到'[Semantical Error]:错误:类AppBundle \ Entity \ Question没有关联名为user' – Patrioticcow
我想我需要告诉'Question'实体我有一个'User'实体 – Patrioticcow