我正在为网站编写一个小型Web应用程序,因此必须访问数据库中的一些现有表。那些我不会添加或改变的东西。
我还会创建一些自己的新表,我会在那里写东西。
现在问题:
我不太确定如何解决这个问题,因此它不会只重写整个数据库。
这是我用来更新架构的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!';
答案 0 :(得分:0)
根据Doctrine的docs(1):
void updateSchema(array $classes, boolean $saveMode = false)
通过比较指定类的数据库架构 ClassMetadata实例到当前的数据库架构即 检查过。
布尔值$ saveMode如果为TRUE,则仅执行部分更新,而不会删除计划删除的资产。
为避免资产掉落到给定的元数据之外,您应该将true作为saveMode参数值传递。
(1)https://www.doctrine-project.org/api/orm/2.6/Doctrine/ORM/Tools/SchemaTool.html#method_updateSchema