13

是否可以在迁移类中调用 .sql 文件?

我找不到关于该主题的任何内容。

4

4 回答 4

16

是的,只需放置该 .sql 文件并从您的迁移类中引用它。

$this->addSql(file_get_contents(__DIR__ . '/sql-dump.sql'));
于 2013-06-17T11:11:11.263 回答
1

我知道这是一个老问题,但当我搜索它时,它仍然是唯一真正的成功。上面的答案可以稍微改进一下。这是一个简单的事情,但你可能不会想到它。如果你有一个 sql 文件,其中包含多个用分号分隔的查询,则可以将分号上的内容展开。

<?php

foreach (explode(';', file_get_contents(__DIR__ . '/sql-dump.sql')) as $sql) {
    $this->addSql($sql);
}
于 2016-06-02T23:13:40.150 回答
0

对于 MySQLi,我使用了:

$this->connection->getWrappedConnection()->getWrappedResourceHandle()->multi_query($sql);
于 2021-06-27T10:16:16.820 回答
0

如果您正在使用 SQLite 并且想要执行一个包含多个用分号分隔的语句的 .sql 文件,我建议使用以下代码:

$this->connection->exec(file_get_contents(__DIR__ . '/sql-dump.sql'));

这是因为如果使用 addSql() 方法,Doctrine 将调用 query() 方法,该方法不支持单个字符串中的多个语句,并且只会执行第一个。仅 exec() 方法支持多个语句。请参阅:php.net/manual/en/function.sqlite-query.php

于 2020-01-05T22:11:41.880 回答