我已经定义了一个Doctrine Entity,它映射到我的数据库中的View.一切正常,实体关系按预期正常工作.
现在的问题是,当orm:schema-manager:update
在CLI上运行时,会为此实体创建一个表,这是我想要阻止的.已有此实体的视图,无需为其创建表.
我是否可以注释实体,以便在仍然保持对所有实体相关功能(关联,...)的访问权限时不会创建表?
我正在尝试使用标准控制台命令从数据库生成实体,如Symfony2文档中所述:http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html .
php app/console doctrine:mapping:convert --from-database --force yml "src/My/HomeBundle/Resources/config/doctrine/metadata/orm"
php app/console doctrine:mapping:import MyHomeBundle yml
php app/console doctrine:generate:entities MyHomeBundle
Run Code Online (Sandbox Code Playgroud)
在此之后,所有表都正确生成.问题是这不会为数据库视图生成实体.当我自己将yml文件添加到src/My/HomeBundle/Resources/config/doctrine/metadata/orm中时,例如:
UserInGroup:
type: entity
table: user_in_group_view
fields:
id:
id: true
type: integer
unsigned: false
nullable: false
generator:
strategy: IDENTITY
userId:
type: integer
unsigned: false
nullable: false
column: user_id
userGroupId:
type: integer
unsigned: false
nullable: false
column: user_group_id
lifecycleCallbacks: { }
Run Code Online (Sandbox Code Playgroud)
我在运行时遇到此异常php app/console doctrine:generate:entities MyHomeBundle
:
Notice: Undefined index: My\HomeBundle\Entity\UserInGroup in C:\Users\ThisIsMe\Projects\SymfonyTestProject\vendor\doctrine\lib\Doctrine\ORM\Mapping\Driver\AbstractFileDriver.php line 121
Run Code Online (Sandbox Code Playgroud)
类似的问题发布在这里:如何在Symfony 2中为数据库视图设置实体(学说)
我知道我可以创建实体类,但我希望我能够生成这样的内容,所以如果我改变了我的视图,我就可以重新生成实体类.有什么建议?
是否可以使用Doctrine 2从数据库生成视图?
我解释:
我的数据库包含一些我想要使用的视图,但我不知道如何生成这些视图.
在我的情况下,我有两个表和一个视图,视图选择每个表中的几列,我只想在项目的"实体"文件夹中的这个视图.
我的实体:
class MyEntity {
/**
* @var string
*
* @ORM\Column(name="hash", type="string", length=128, unique=true, nullable=false)
*/
protected $hash;
}
Run Code Online (Sandbox Code Playgroud)
hash - 由数据库自动生成列。当我尝试在数据库中创建新记录时,我得到
“hash”列中的空值违反了非空约束
是否有机会将哈希设置为只读?或禁用插入?
Doctrine 实体可以拥有该标志readOnly
.
该旗应该如何readOnly
使用?
/** @Entity(readOnly) */ <-- like this?
/** @Entity(readOnly=true) */ <-- or like this?
class User
{
//...
}
Run Code Online (Sandbox Code Playgroud)