And*_*kin 9 yaml symfony doctrine-orm
我已经为我的映射文件尝试了这个目录结构:
/config/doctrine/Place.orm.yml
/config/doctrine/Place/Type.orm.yml
/config/doctrine/Place/Price.orm.yml
Run Code Online (Sandbox Code Playgroud)
并在我的映射文件中指向了相应的实体,如下所示:
Project\TestBundle\Entity\Place\Type:
type: entity
table: place_type
id:
id:
type: integer
generator: { strategy:AUTO }
fields:
name:
type: string
length: 255
Run Code Online (Sandbox Code Playgroud)
但这会返回错误.系统似乎无法检测到Entity的映射文件.
Tom*_*ski 16
长话短说,这是可能的.
如果您的bundle的Entity文件夹中有文件夹结构,那很简单.您必须使用Entity命名空间下面的实体命名空间部分命名您的ORM文件并替换\为..
因此,例如,如果您有Project\TestBundle\Entity\Place\Type实体,则ORM文件(位于config/doctrine包内的文件夹中)将具有名称Place.Type.orm.yml.
如果你想从Entity文件夹之外(甚至在bundle文件夹之外)使用Doctrine实体类,它会有点复杂,但仍然可能.Doctrine Bundle允许在其配置中为您的类定义自定义映射位置.
再说一遍 - 例子.如果您的实体位于Project\Test命名空间(在文件夹中src/Project/Test),您可以像这样定义映射:
应用程序/配置/配置*.yml
doctrine:
orm:
MyCustomDomain:
mapping: true
type: yml
dir: %kernel.root_dir%/config/projecttest
alias: ProjectTest
prefix: Project\Test
is_bundle: false
Run Code Online (Sandbox Code Playgroud)
实际上,Doctrine Bundle会自动执行类似的操作,这就是为什么您可以将所有类放在Entity子文件夹中而不再担心的原因.
前缀是名称空间前缀.Folder是包含配置文件的文件夹的路径.别名很有趣 - 它允许在DQL查询和映射文件中使用更简单的对象名称.Symfony的TestBundle:Test语法在同一个前提下工作 - TestBundle是TestBundle中所有实体的别名.is_bundle告诉Doctrine,这些实体不在Symfony捆绑中,需要一些不同的处理方法.
在定义自己的映射时有一些注意事项.Mapper使用前缀上的"第一个匹配"规则.因此,如果您在太宽的名称空间前缀上声明映射,它可以覆盖其他映射.
然而,它有时是有用的.例如,如果要将"外部"库中的类直接映射到Doctrine.或者正在创建一个与Symfony不完全绑定的库,并希望将一些类保留在bundle之外.
如果要将学说实体组织到子文件夹中
例如: src/AppBundle/Entity/subfolder/MyEntity.php
然后相应的ORM文件应如下所示:
src/Resources/config/Doctrine/subfolder.MyEntity.orm.yml
不要在里面制作子文件夹src/Resources/config/Doctrine/*
*注意:如果您查看Doctrine配置文档,看起来可以使用以下命令为orm.yml文件配置不同的位置:
doctrine:
orm:
# An array of mappings, which may be a bundle name or something else
mapping_name:
mapping: true
type: ~
dir: ~
alias: ~
prefix: ~
is_bundle: ~
Run Code Online (Sandbox Code Playgroud)
但我没试过这个.也许其他人可以确认改善这个答案?
| 归档时间: |
|
| 查看次数: |
5912 次 |
| 最近记录: |