[英]Inner join with ProxyQuery + where clause
我正在使用Sonata Admin软件包 ,但在形成查询以显示数据时遇到了麻烦。
我想根据登录的用户显示数据。
在我的数据库中,有以下表格:
-工作表
- id
- title
- description
- ....
- company_id (FK)
-申请表
- id
- ...
- job_id (FK)
-公司表
- id
- ...
我想根据公司拉所有应用程序(登录的用户也已附加到公司)。 所以,我需要与工作表和公司表+,其中公司等于... 内连接 。
在我的ApplicationAdmin类中,我现在有:
public function createQuery($context = 'list') {
$query = parent::createQuery($context);
$user = $this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser();
if($user->hasRole('ROLE_COMPANY'))
{
// I'M STUCK HERE
$query->setParameter('company', $user->getCompany());
}
return $query;
}
有人可以帮我如何与公司建立2个内部联接以及where子句吗?
我假设您的应用程序实体与您的工作实体具有多对一关系,而您的工作实体与您的公司实体具有多对一关系,如下所示
公司实体
<?php
use Doctrine\Common\Collections\ArrayCollection;
/** @Entity **/
class Company
{
// ...
/**
* @OneToMany(targetEntity="Job", mappedBy="company")
**/
private $jobs;
// ...
public function __construct() {
$this->jobs= new ArrayCollection();
}
// getter and setters
}
工作实体
/** @Entity **/
class Job
{
// ...
/**
* @ManyToOne(targetEntity="Company", inversedBy="jobs")
* @JoinColumn(name="company_id", referencedColumnName="id")
**/
private $company;
// ...
// ...
/**
* @OneToMany(targetEntity="Application", mappedBy="job")
**/
private $applications;
// ...
public function __construct() {
$this->applications= new ArrayCollection();
}
// getter and setters
}
应用实体
/** @Entity **/
class Application
{
// ...
/**
* @ManyToOne(targetEntity="Job", inversedBy="applications")
* @JoinColumn(name="job_id", referencedColumnName="id")
**/
private $job;
// ...
// getter and setters
}
然后,在ApplicationAdmin
类的createQuery
函数中,您已经在查询对象中拥有Application
实体,您可以将其与第一个Job
实体然后与Company
实体一起加入
public function createQuery($context = 'list') {
$query = parent::createQuery($context);
$user = $this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser();
if($user->hasRole('ROLE_COMPANY'))
{
$query->innerJoin($query->getRootAlias().'.job','j')
->innerJoin('j.company','c')
->where('c.id = :company')
->setParameter('company', $user->getCompany()->getId());
}
return $query;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.