Update1:我在另一个运行mysql的项目上测试了这个 - 我删除了一个实体并尝试通过导入表来“恢复”它,我在那里得到了同样的错误同样。所以这不是一个mssql问题,它必须是配置问题。我错过了什么配置?
Update2:当不使用过滤器时,它会全部导入并且不会显示任何错误。过滤器有什么问题?
我正在尝试从现有的mssql数据库生成实体。为此,有关我正在使用的内容的一些信息:
Config.yml:
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
orm:
default_entity_manager: default
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
auto_mapping: true
naming_strategy: doctrine.orm.naming_strategy.underscore
使用dbal部分中指定的值连接到数据库是可行的,我可以在我的代码中创建一个新实体并运行schema update命令来创建相应的表。另一方面,当尝试使用以下命令从现有表(名为“dbo.tblPlaces”)生成实体时:
php app/console doctrine:mapping:import --force AppBundle xml --filter="tblPlaces"
(我在过滤器中也试过“dbo.tblPlaces”),我一直收到错误:
数据库没有任何映射信息。
我已经阅读了几乎所有其他帖子,我在这里可以找到关于上述错误的stackoverflow和symfony的官方文档,但是无法找到解决方案。为什么我一直收到这个烦人的错误信息?该表非常小,仅包含以下字段:
答案 0 :(得分:1)
我将把我的两分钱放在这里,并告诉你只有70-80%的必要映射信息基于字段,索引和外键约束。
来自Docs,
Doctrine能够转换大约70-80%的必要条件 基于字段,索引和外键的映射信息 限制。学说不能发现反向关联,继承 类型,具有外键作为主键或语义的实体 对级联或生命周期事件等关联的操作
一段时间后,我和MsSQL和Symfony面临同样的问题。
我最终得到了另一种解决方案。
我最终得到的是我在MsSQL中创建了一个存储过程,它以记录的形式在SQL服务器中生成实体。然后,您可以将其复制并粘贴到实体文件中,然后您就可以生成工作实体。它对我来说非常有用,也有希望对你有用。
您可以从这里下载https://github.com/dipens/W3_APP_GEN_DOCTRINE.sql/blob/master/W3_APP_GEN_Doctrine
代码在这里:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[W3_APP_GEN_Doctrine] @tablename varchar(255)
AS
WITH D AS (
select data_type +
case
when data_type like '%text' or data_type like 'image' or data_type like 'sql_variant' or data_type like 'xml'
then ''
when data_type = 'float'
then '(' + convert(varchar(10), isnull(numeric_precision, 18)) + ')'
when data_type = 'numeric' or data_type = 'decimal'
then '(' + convert(varchar(10), isnull(numeric_precision, 18)) + ',' + convert(varchar(10), isnull(numeric_scale, 0)) + ')'
when (data_type like '%char' or data_type like '%binary') and character_maximum_length = -1
then '(max)'
when character_maximum_length is not null
then '(' + convert(varchar(10), character_maximum_length) + ')'
else ''
end as CONDENSED_TYPE
,
case
when data_type like '%text%' or data_type like '%char%' OR data_type ='uniqueidentifier' OR data_type ='bigint'
then 'string'
when data_type ='int' or data_type ='smallint' or data_type ='tinyint'
then 'integer'
when data_type ='date'
then 'datetime'
when data_type ='bit'
then 'boolean'
when data_type ='decimal'
then 'string' --'decimal'
when data_type ='datetime'
then data_type
when data_type ='double' OR data_type ='float'
then 'float'
when data_type ='money'
then 'string' --'decimal'
when data_type ='bigint'
then 'string'
end as DoctrineType
,object_id(table_name) AS TID ,C.*, SC.is_computed, SC.is_identity
from information_schema.columns C
INNER JOIN sys.columns SC ON object_id(table_name)=SC.object_id and C.COLUMN_NAME=SC.name
where table_name= @tablename
)
SELECT
'/**'
+ CHAR(13)+CHAR(10) + '* @var ' + IIF(D.DoctrineType='datetime','\'+D.DoctrineType,D.DoctrineType)
+ CHAR(13)+CHAR(10) + '*'
+ CHAR(13)+CHAR(10) + '* @ORM\Column(name="' + D.COLUMN_NAME + '", type="' + D.DoctrineType + '"'
+ IIF(D.DoctrineType='string' and D.DATA_TYPE NOT IN ('uniqueidentifier','decimal','money','bigint'),', length=' + convert(varchar(25),D.CHARACTER_MAXIMUM_LENGTH),'')
+ IIF(D.DoctrineType='decimal',', precision=' + convert(varchar(25),D.NUMERIC_PRECISION) + ', scale=' + convert(varchar(25),D.NUMERIC_SCALE),'')
+ IIF(D.IS_NULLABLE='NO' and D.is_identity=0,', nullable=false','')
+ ')'
+ IIF(D.is_identity=1,CHAR(13)+CHAR(10) + '* @ORM\Id','')
+ IIF(D.is_identity=1,CHAR(13)+CHAR(10) + '* @ORM\GeneratedValue(strategy="AUTO")','')
+ CHAR(13)+CHAR(10) + '*/'
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10) + 'private $' + D.COLUMN_NAME +';'
+ CHAR(13)+CHAR(10)
AS DOCTRINE
--,D.ORDINAL_POSITION
FROM D
--ORDER BY D.ORDINAL_POSITION
UNION ALL
SELECT
'/**'
+ CHAR(13)+CHAR(10) + '* @return ' + IIF(D.DoctrineType='datetime','\'+D.DoctrineType,D.DoctrineType)
+ CHAR(13)+CHAR(10) + '*/'
+ CHAR(13)+CHAR(10) + 'public function get' + replace(D.COLUMN_NAME,'_','') + '()'
+ CHAR(13)+CHAR(10) + '{'
+ CHAR(13)+CHAR(10) + ' return $this->' + D.COLUMN_NAME + ';'
+ CHAR(13)+CHAR(10) + '}'
+ CHAR(13)+CHAR(10)
+ CHAR(13)+CHAR(10)+ '/**'
+ CHAR(13)+CHAR(10) + '* @param ' + IIF(D.DoctrineType='datetime','\'+D.DoctrineType,D.DoctrineType) + ' $' + D.COLUMN_NAME
+ CHAR(13)+CHAR(10) + '*/'
+ CHAR(13)+CHAR(10) + 'public function set' + replace(D.COLUMN_NAME,'_','') + '('+ '$' + D.COLUMN_NAME + ')'
+ CHAR(13)+CHAR(10) + '{'
+ CHAR(13)+CHAR(10) + ' $this->' + D.COLUMN_NAME + '=' + '$' + D.COLUMN_NAME + ';'
+ CHAR(13)+CHAR(10) + '}'
+ CHAR(13)+CHAR(10)
--,D.ORDINAL_POSITION
FROM D