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

Amy*_*ley 4 mariadb laravel laravel-5.5

我正在尝试在 Laravel 5.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");
  }
}
Run Code Online (Sandbox Code Playgroud)

Amy*_*ley 5

是的,这是Laravel github中的一个开放问题。对我有用的建议解决方法是将迁移文件中的 CREATE VIEW 替换为 CREATE OR REPLACE。所以完整的 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
)
");

}
Run Code Online (Sandbox Code Playgroud)