MySQL视图不会在Laravel 5.5迁移中丢失

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

我正在尝试用Laravel5.5编写一个PHPUnit测试用例。我想在这个过程中运行迁移。我的用户迁移脚本实际上创建了一个视图,而不是一个表。似乎所有其他正常的表都会像预期的那样被创建和删除。但用户视图没有。你知道为什么吗?我可以在PHPMyAdmin中手动运行DROP语句。以下是我的迁移脚本:

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开发者都写下了迁移。。。