我正在尝试创建一个自定义 laravel (5.2) 迁移命令,它的工作原理基本相同,migrate:status
只是它只列出了待处理的迁移而不是所有迁移。
为此,我非常简单地将其复制migrate:status
到我的 app/console 目录中的另一个类中,并调整了代码以满足我的需要。但是,每当我尝试运行它时,都会出现错误:
[Illuminate\Contracts\Container\BindingResolutionException] 目标 [Illuminate\Database\Migrations\MigrationRepositoryInterface] 在构建 [App\Console\Commands\PendingMigrations, Illuminate\Database\Migrations\Migrator] 时不可实例化。
类本身的内容和fire()
方法似乎并不重要,因为它没有达到那么远,它在__construct()
方法中失败了。
<?php namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Database\Migrations\Migrator;
class PendingMigrations extends Command
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'migrate:pending';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Shows a list of pending migrations';
/**
* The migrator instance.
*
* @var \Illuminate\Database\Migrations\Migrator
*/
protected $migrator;
/**
* Create a new migration rollback command instance.
*
* @param \Illuminate\Database\Migrations\Migrator $migrator
* @return \Illuminate\Database\Console\Migrations\StatusCommand
*/
public function __construct(Migrator $migrator)
{
parent::__construct();
$this->migrator = $migrator;
}
/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
}
}
其原因可能与 IoC 容器和加载内容的顺序有关,但我对 Laravel 的内部工作原理知之甚少,无法弄清楚更多。
一定有可能吗?
我目前卡在 5.2 上,所以我不确定这个问题是否存在于更新的版本中。
到目前为止,我唯一尝试的是将迁移服务提供商添加到列表的顶部,config/app.php
但它似乎没有影响,无论如何这只是一个随机猜测。
providers' => [
Illuminate\Database\MigrationServiceProvider::class,`
]