ZF,如何使用Doctrine 2生成实体

时间:2010-08-04 09:40:43

标签: database zend-framework

我最近决定尝试Doctrine 2。 我设法将它部分地集成到Zend。命令行工作,我设法询问数据库。 问题来自我的不同实体,代理,......的生成。

之前,使用Doctrine 1.x,我们可以从数据库开始生成YML文件和业务类。

现在,在Doctrine 2中,我们必须从映射文件(YML,XML,......中的元数据)生成实体。但是无法使用Doctrine 2从DB生成文件(我在其上找不到任何内容......)。

所以,我用mysql Workbench创建了DB YML文件。但是这些文件与Doctrine 2不兼容。

幸运的是,doctrine命令有一些实用程序来转换YML。但我得到另一个问题:我没有找到它或帮助它!

也许有人知道Doctrine 2比我更好,可以帮助我吗? 转换时的问题是:

Could not map doctrine 1 type 'float'!

这是YML部分似乎有问题:

  tVenue:
  tableName: t_venues
  columns:
    ven_id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    ven_title:
      type: string(250)
      default: null
    ven_adress:
      type: clob(65535)
      notnull: true
    ven_zip:
      type: string(10)
      notnull: true
    cit_id:
      type: integer(4)
      notnull: true
    cit_label:
      type: string(150)
      notnull: true
    ven_lat:
      type : float
      default: null
    ven_long:
      type : float
      default: null
  indexes:
    cit_id:
      fields: [cit_id]
  options:
    charset: utf8
    collate: utf8_unicode_ci

我检查这个声明是Doctrine 1的标准。

有人有想法吗? 感谢。

3 个答案:

答案 0 :(得分:1)

对于浮动问题:

尝试decimal代替float,它会映射到PHP双倍。

答案 1 :(得分:0)

我已经实现了从数据库生成实体的新命令,请检查https://github.com/umpirsky/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesDbCommand.php

只需将其添加为:

$cli->addCommands(array(
// DBAL Commands
new \Doctrine\DBAL\Tools\Console\Command\RunSqlCommand(),
new \Doctrine\DBAL\Tools\Console\Command\ImportCommand(),

// ORM Commands
new \Doctrine\ORM\Tools\Console\Command\ClearCache\MetadataCommand(),
new \Doctrine\ORM\Tools\Console\Command\ClearCache\ResultCommand(),
new \Doctrine\ORM\Tools\Console\Command\ClearCache\QueryCommand(),
new \Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand(),
new \Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand(),
new \Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand(),
new \Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand(),
new \Doctrine\ORM\Tools\Console\Command\ConvertDoctrine1SchemaCommand(),
new \Doctrine\ORM\Tools\Console\Command\GenerateRepositoriesCommand(),
new \Doctrine\ORM\Tools\Console\Command\GenerateEntitiesCommand(),
new \Doctrine\ORM\Tools\Console\Command\GenerateEntitiesDbCommand(),
new \Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand(),
new \Doctrine\ORM\Tools\Console\Command\ConvertMappingCommand(),
new \Doctrine\ORM\Tools\Console\Command\RunDqlCommand(),
new \Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand(),

));

答案 2 :(得分:0)

您还可以使用Skipper作为从可视模型生成Yaml / Xml / Annotations的替代方法。

它完全支持Doctrine2,因此生成的模式文件可以随时使用,作为奖励,您可以直接在可视化模型中编辑ORM特定属性。您需要做的就是用一个工具处理。