我有一个select查询,我正在尝试向它添加一个联接。
在下面的示例中,我有一个Question
实体,用于返回一些结果,我想添加一个与User
实体的联接,例如:
SELECT question FROM question AS q LEFT JOIN USER u ON q.user_id= u.id;
我希望结果是User
实体中的Question
实体,如下所示:
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);
有什么想法吗?
发布于 2016-11-08 23:00:07
怎么说呢:
$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
的实体:
/**
* @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。
https://stackoverflow.com/questions/40494599
复制相似问题