我正在使用Sonata Admin bundle,而我在构建查询以显示数据时遇到问题。
我想根据用户的登录信息显示数据 在我的数据库中,我有以下表格:
- 工作表
- 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公司的子句吗?
答案 0 :(得分:1)
我认为您的申请实体与您的工作实体有多对一的关系,而您的工作实体与您的公司实体之间存在多对一的关系,如下所示
公司实体
<?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
实体1}}实体
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;
}