gpt4 book ai didi

php - 使用 ProxyQuery + where 子句进行内连接

转载 作者:行者123 更新时间:2023-11-29 12:07:48 25 4
gpt4 key购买 nike

我正在使用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 子句吗?

最佳答案

我假设您的应用程序实体与您的工作实体具有多对一关系,并且您的工作实体与您的公司实体具有多对一关系,如下所示

公司实体

<?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;
}

关于php - 使用 ProxyQuery + where 子句进行内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31180871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com