【问题标题】:How to make Laravel migrator work with namespaced migrations?如何使 Laravel 迁移器与命名空间迁移一起工作?
【发布时间】:2014-06-11 14:33:58
【问题描述】:

我成功地命名了我的整个包,但我无法让命名空间迁移工作。在 autoload_classmap.php 中,迁移类的命名空间很好,但 Migrator 并没有在命名空间中寻找迁移类。如何让迁移器在命名空间内搜索迁移?

迁移文件

<?php namespace Atomend\Aeuser;

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Schema, User;

class UsersTable extends Migration {

   public function up() {
      Schema::create("users", function(Blueprint $table) {

         $table
            ->increments("id");

autoload_classmap.php

'Atomend\\Aeuser\\UsersTable' => $baseDir . '/src/migrations/2014_04_21_184359_users_table.php',

终端错误

PHP Fatal error:  Class 'UsersTable' not found in

这是合乎逻辑的,因为 UsersTable 位于 Atomend\Aeuser 命名空间中。

发布迁移

php artisan migrate --bench="atomend/aeuser"`

所以要明确一点,当丢失命名空间时,一切正常且花花公子。

【问题讨论】:

  • 您是如何创建迁移文件的?
  • 能否包含执行迁移的命令?你的工作还在工作台上吗?
  • 您尝试过使用--path 吗? php artisan migrate --path=app/foo/migrations
  • 您是否尝试在工作台根目录和 laravel 根文件夹上运行 composer dump-autoload
  • 那不行,autoload_classmap.php也没有问题。正如您在示例代码中看到的那样,它位于正确的命名空间中。

标签: laravel laravel-4


【解决方案1】:

Laravel 迁移器不适用于命名空间迁移。在这种情况下,最好的办法是继承并替换 Migrator 类,就像 Christopher Pitt 在他的博客文章中解释的那样:https://medium.com/laravel-4/6e75f99cdb0

【讨论】:

  • 嗨 Antionio,很高兴收到有关此主题的一些反馈!我会看看你的建议,也许是拉取请求的一个不错的功能。
  • 显然是一个较晚的补充,但我发现克里斯托弗皮特的文章有几个细节让我很反感,我已经在another question 中发布了缺少的内容
猜你喜欢
  • 2016-03-14
  • 2020-02-23
  • 2015-07-03
  • 2013-02-05
  • 2015-11-25
  • 2017-05-05
  • 2015-07-05
  • 2015-07-25
  • 2015-10-02
相关资源
最近更新 更多