symfony - 如何使用 Symfony 5 EasyAdmin Bundle 基于多对多关系在列表中显示用户特定数据
问题描述
我对 EasyAdmin 包非常陌生。我试图在登录用户的列表中加载用户特定的内容。
所以这是我的composer.json
文件:
{
"type": "project",
"license": "proprietary",
"require": {
"php": "^7.2.5",
"ext-ctype": "*",
"ext-iconv": "*",
"easycorp/easyadmin-bundle": "^2.3",
"sensio/framework-extra-bundle": "^5.1",
"symfony/asset": "5.0.*",
"symfony/console": "5.0.*",
"symfony/dotenv": "5.0.*",
"symfony/expression-language": "5.0.*",
"symfony/flex": "^1.3.1",
"symfony/form": "5.0.*",
"symfony/framework-bundle": "5.0.*",
"symfony/http-client": "5.0.*",
"symfony/intl": "5.0.*",
"symfony/mailer": "5.0.*",
"symfony/monolog-bundle": "^3.1",
"symfony/notifier": "5.0.*",
"symfony/orm-pack": "*",
"symfony/process": "5.0.*",
"symfony/security-bundle": "5.0.*",
"symfony/serializer-pack": "*",
"symfony/string": "5.0.*",
"symfony/translation": "5.0.*",
"symfony/twig-pack": "*",
"symfony/validator": "5.0.*",
"symfony/web-link": "5.0.*",
"symfony/yaml": "5.0.*"
},
我有一个项目需求实体,它与用户实体具有多对多关系,如下所示:
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="User", inversedBy="projectRequirementsHasUserProjectRequirements")
* @ORM\JoinTable(name="project_requirements_has_user",
* joinColumns={
* @ORM\JoinColumn(name="project_requirements_has_user_project_requirements_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="project_requirements_has_user_user_id", referencedColumnName="id")
* }
* )
*/
private $projectRequirementsHasUserUser;
/**
* Constructor
*/
public function __construct()
{
$this->projectRequirementsHasUserUser = new \Doctrine\Common\Collections\ArrayCollection();
}
因此,在添加要求时,我可以像这样分配用户:
您可以看到第一个要求已分配给 2 个用户:
现在我想显示分配给登录用户的所有要求。
我开始知道我需要覆盖默认的 EasyAdminController,所以我在以下位置配置了我的实体config/packages/easy_admin.yaml
:
# Project Planning
ProjectRequirements:
controller: App\Controller\ProjectRequirementsController
class: App\Entity\ProjectRequirements
然后创建一个控制器,但不知道如何编写过滤器或查询以仅选择已分配给登录用户的要求:
<?php
namespace App\Controller;
use Doctrine\ORM\QueryBuilder;
use EasyCorp\Bundle\EasyAdminBundle\Controller\EasyAdminController;
class ProjectRequirementsController extends EasyAdminController {
protected function createListQueryBuilder($entityClass, $sortDirection, $sortField = null, $dqlFilter = null)
{
/** @var QueryBuilder $result */
$result = parent::createListQueryBuilder($entityClass, $sortDirection, $sortField, $dqlFilter);
return $result;
}
}
任何帮助都是非常可观的。
解决方案
好像您已经创建了一个多对多单向连接。尝试使用文档中描述的双向映射。
然后,您应该通过用户实体中的数组集合轻松访问您登录的用户的分配。
推荐阅读
- azure - 如何在 Azure 门户中查看实际的事件网格消息?
- entity-framework-core - 如何在 EF Core 5 中实现 TPC?
- php - UPDATE 查询中的 SQL 语法错误接近读取
- python - 如何加载具有与张量流输入相同长度列表的列的数据帧?
- mysql - 通过调度程序从 MySQL 调用外部 API
- javascript - 如何在 NextJS 10 中初始化 webworker?
- java - spring 控制器如何处理 application/octet-stream 请求?
- javascript - JavaScript克隆在使用反应时不起作用
- reactjs - 错误:reactapp@0.1.0 构建:`react-scripts build`
- java - 在 Anylogic 中使用 Java 进行开发 - 尝试代理的访问参数