Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用条令更新模式而不删除每个表?_Php_Mysql_Doctrine Orm - Fatal编程技术网

Php 使用条令更新模式而不删除每个表?

Php 使用条令更新模式而不删除每个表?,php,mysql,doctrine-orm,Php,Mysql,Doctrine Orm,我正在为一个网站编写一个小型web应用程序,为此,我必须访问数据库中已有的一些表。我不会添加或更改任何内容 我还将创建一些我自己的新表,在那里我将写一些东西 现在问题是: 当我运行updateSchema时,它会删除数据库中我没有专门为其创建实体的每个表。那里大概有30张桌子,而我只需要2张!我根本不想碰其他人。它不应该删除它们 在这两个列中,我只需要3列“id”、“name”和“email”,但表中又有10列我根本不感兴趣,因此没有映射到我的实体对象。更新确实删除了我不匹配的每一列。再说一次

我正在为一个网站编写一个小型web应用程序,为此,我必须访问数据库中已有的一些表。我不会添加或更改任何内容

我还将创建一些我自己的新表,在那里我将写一些东西

现在问题是:

  • 当我运行updateSchema时,它会删除数据库中我没有专门为其创建实体的每个表。那里大概有30张桌子,而我只需要2张!我根本不想碰其他人。它不应该删除它们
  • 在这两个列中,我只需要3列“id”、“name”和“email”,但表中又有10列我根本不感兴趣,因此没有映射到我的实体对象。更新确实删除了我不匹配的每一列。再说一次,它不应该碰这些东西
我不太确定如何解决这个问题,所以它不会重写整个数据库

这是我用来更新模式的setup.php:

<?php

require_once '../inc/config.inc.php';

$em= Inc\Config::getEm();

$schemaTool = new \Doctrine\ORM\Tools\SchemaTool($em);

$metadata = $em->getMetadataFactory()->getAllMetadata();


try {
    $schemaTool->updateSchema($metadata);
} catch (PDOException $e) {
    echo 'WARNING: There was a problem updating the database schema: ';
    echo $e->getMessage() . '<br />';
    if (preg_match("/Unknown database '(.*)'/", $e->getMessage(), $matches)) {
        die(
                sprintf('Create the database %s with the Collation utf8_general_ci', matches[1])
        );
    }
}

echo 'Setup successfully completed!';

根据条令的文件(1):

通过比较 将元数据实例转换为当前数据库架构 检查

布尔$saveMode如果为TRUE,则只执行部分更新,而不删除计划删除的资产

为避免删除给定元数据之外的资产,应将true作为saveMode参数值传递

(1)

您考虑过吗?
void updateSchema(array $classes, boolean $saveMode = false)