MySQL视图不会在Laravel 5.5迁移中丢失
我正在尝试用Laravel5.5编写一个PHPUnit测试用例。我想在这个过程中运行迁移。我的用户迁移脚本实际上创建了一个视图,而不是一个表。似乎所有其他正常的表都会像预期的那样被创建和删除。但用户视图没有。你知道为什么吗?我可以在PHPMyAdmin中手动运行DROP语句。以下是我的迁移脚本:MySQL视图不会在Laravel 5.5迁移中丢失,laravel,mariadb,laravel-5.5,Laravel,Mariadb,Laravel 5.5,我正在尝试用Laravel5.5编写一个PHPUnit测试用例。我想在这个过程中运行迁移。我的用户迁移脚本实际上创建了一个视图,而不是一个表。似乎所有其他正常的表都会像预期的那样被创建和删除。但用户视图没有。你知道为什么吗?我可以在PHPMyAdmin中手动运行DROP语句。以下是我的迁移脚本: use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class Create
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
public function up()
{
DB::statement("
CREATE VIEW users AS
(
SELECT
PD.ID AS id,
PCI.Username AS username,
PCI.Username AS first_name
FROM table1.Person PD
LEFT JOIN table2.Contact PCI ON PCI.ID = PD.ID
)
");
}
public function down()
{
DB::statement("DROP VIEW users");
}
}
是的,这是一个悬而未决的问题。对我来说,建议的解决方法是用CREATE或replace替换迁移文件中的CREATE视图。因此,full up()函数将是:
public function up()
{
DB::statement("
CREATE OR REPLACE VIEW users AS
(
SELECT
PD.ID AS id,
PCI.Username AS username,
PCI.Username AS first_name
FROM table1.Person PD
LEFT JOIN table2.Contact PCI ON PCI.ID = PD.ID
)
");
}
出于好奇,您使用哪种DBMS进行测试?@ChrisForrence我使用的是mariadbt实际上,这可能是一个Laravel bug。假设您在测试中使用RefreshDatabase特性,则该特性会删除所有表(仅表),而不是运行回滚脚本。它是:。我认为您最好的选择可能是从RefreshDatabase扩展到同时删除所有视图。谢谢,我很惊讶没有其他人特别询问这个问题。也许大多数的Laravel开发者都写下了迁移。。。