如何为 Symfony 实体定义默认实体管理器
How to define default Entity Manager for Symfony Entities
我正在设置一个包含多个数据库的应用程序,每个数据库都有自己的实体管理器。
当我查询数据并为实体指定实体管理器时,它工作正常。
我无法创建具有关系的表单(两个实体使用相同的实体管理器)。
我在尝试呈现表单以创建新实体时收到以下错误
[Semantical Error] Couldn't find constant App\Repository\Admin\Item\ItemsRepository, class App\Entity\Item\Items.
// App/Entity/Item/Items.php
/**
* Items
*
* @ORM\Entity(repositoryClass=App\Repository\Admin\Item\ItemsRepository)
* @ORM\Table(name="items")
* @ORM\Entity
*/
class Items
{
....
}
// App/Repository/Item/ItemsRepository.php
namespace App\Repository\Admin\Item;
use App\Entity\Item\Items;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method Items|null find($id, $lockMode = null, $lockVersion = null)
* @method Items|null findOneBy(array $criteria, array $orderBy = null)
* @method Items[] findAll()
* @method Items[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ItemsRepository extends ServiceEntityRepository
{
...
}
#config/package/doctrine.yaml
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Default'
prefix: 'App\Entity\Default'
item_service:
connection: item_service
mappings:
ItemAlias:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Item'
prefix: 'App\Entity\Item'
alias: ItemAlias
整体文件结构:
src
Controller
Admin
Item
UnitConversionsController.php
Entity
Item
Items.php
Repository
Admin
Item
ItemsRepository.php
如果有一种方法可以手动定义类型 class 用来提取相关数据以填充表单的实体管理器,我会很高兴。
如何让 symfony 识别实体目录的默认实体管理器?
错误提到了一个常量,这似乎是一个线索。引用 FQCN 所以它是一个字符串:
repositoryClass="App\Repository\Admin\Item\ItemsRepository"
我正在设置一个包含多个数据库的应用程序,每个数据库都有自己的实体管理器。
当我查询数据并为实体指定实体管理器时,它工作正常。
我无法创建具有关系的表单(两个实体使用相同的实体管理器)。
我在尝试呈现表单以创建新实体时收到以下错误
[Semantical Error] Couldn't find constant App\Repository\Admin\Item\ItemsRepository, class App\Entity\Item\Items.
// App/Entity/Item/Items.php
/**
* Items
*
* @ORM\Entity(repositoryClass=App\Repository\Admin\Item\ItemsRepository)
* @ORM\Table(name="items")
* @ORM\Entity
*/
class Items
{
....
}
// App/Repository/Item/ItemsRepository.php
namespace App\Repository\Admin\Item;
use App\Entity\Item\Items;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method Items|null find($id, $lockMode = null, $lockVersion = null)
* @method Items|null findOneBy(array $criteria, array $orderBy = null)
* @method Items[] findAll()
* @method Items[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class ItemsRepository extends ServiceEntityRepository
{
...
}
#config/package/doctrine.yaml
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Default'
prefix: 'App\Entity\Default'
item_service:
connection: item_service
mappings:
ItemAlias:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Item'
prefix: 'App\Entity\Item'
alias: ItemAlias
整体文件结构:
src
Controller
Admin
Item
UnitConversionsController.php
Entity
Item
Items.php
Repository
Admin
Item
ItemsRepository.php
如果有一种方法可以手动定义类型 class 用来提取相关数据以填充表单的实体管理器,我会很高兴。
如何让 symfony 识别实体目录的默认实体管理器?
错误提到了一个常量,这似乎是一个线索。引用 FQCN 所以它是一个字符串:
repositoryClass="App\Repository\Admin\Item\ItemsRepository"