运行Doctrine转换映射时跳过表 - php

我第一次坐下来教义,尝试在现有站点/数据库上使用其中的某些命令行工具。我从命令行使用了映射和实体逆向工程工具,并希望了解它将从php / mysql中的现有网站生成什么样的文件。

但是,它会在出现任何异常时停止。我已经能够为枚举创建类型映射,现在只需将它们扔到字符串上即可,但是现在它阻止了我在未指定主ID密钥的表上使用。我对在链接表中使用主键或复合键的讲座不感兴趣,我只是在尝试学习教义的同时尝试生成一些输出。

有没有办法告诉学说跳过抛出异常的表,或者在命中它们时不停地直通桶?我现在只想要一些示例输出,并且不想为了重构Doctrine可以做什么而完全重构一个复杂的数据库。

西南

参考方案

Doctrine的转换和验证的主要问题是,默认情况下它将读取整个数据库和所有表,而不管它们是否存在实体或映射。即使在调用--filter=""orm:convert:mapping时使用orm:generate:entities标志

要解决此问题并让Doctrine跳过抛出异常的表,可以通过使用setFilterSchemaAssetsExpression定义Doctrine以仅读取所需的表。

$isDev = true;

$config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array('/path/to/entities'), $isDev);
$config->setFilterSchemaAssetsExpression('/^(table1|table2|prefixed_.*|.*_suffixed)$/');

$em =  \Doctrine\ORM\EntityManager::create(array(
    'driver' => 'db_driver',
    'host' => 'localhost',
    'user' => 'user_name',
    'password' => 'user_password',
    'dbname' => 'database',
), $config);

或者,您可以为现有实体管理器的连接设置过滤器。

$em->getConnection()->setFilterSchemaAssetsExpression('/^(filtered_table)$/');

参考:
http://doctrine-orm.readthedocs.org/en/latest/reference/configuration.html

当然,这不是告诉教义忽略异常的方法,但是应该可以帮助您开始学习一些特定表而不是整个数据库上的现有应用程序。

作为旁注,自您提到以来,您已经具有链接表。
如果表中有不包含在过滤器中的外键,则--from-database转换仍将为其创建引用。
您将必须手动将映射更改为其原始格式,而不是将其关联到OneToMany,ManyToOne或ManyToMany的关联映射。

来自doctrine orm:convert:mapping --from-database annotation /path/to/entities的注释映射

/**
 * @ORM\Entity
 * @ORM\Table(name="order")
 */
class Order
{
  /** 
   * @var \Customer
   * @ORM\ManyToOne(targetEntity="Customer")
   * @ORM\JoinColumns({
   *   @ORM\JoinColumn(name="customer", referencedColumnName="id", nullable=true)
   * })
   */
   private customer;
}

/**
 * @ORM\Entity
 * @ORM\Table(name="order")
 */
class Order
{
  /** 
   * @var integer
   * @ORM\Column(name="customer", type="integer", nullable=true)
   */
   private customer;
}

然后,不要忘记使用doctrine orm:validate-schema来确保映射是同步的。

PHP:将数组值加在一起 - php

我相信这比标题听起来要难一些,但我可能完全错了。我有一个像这样的数组:[["londrina",15],["cascavel",34],["londrina",23],['tiradentes',34],['tiradentes',21]] 我希望能够采用通用…

PHP JQuery复选框 - php

我有以下片段。 var myData = { video: $("input[name='video[]']:checked").serialize(), sinopse: $("#sinopse").val(), dia: $("#dia").val(), quem: $(&#…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…