2017-08-29 1 views
2

J'essaie de créer une commande de migration personnalisée laravel (5.2) qui fonctionne essentiellement de la même manière que migrate:status sauf qu'elle ne fait que répertorier les migrations en attente à la place de toutes les migrations. Pour ce faire, j'ai tout simplement copié le migrate:status dans une autre classe de mon répertoire app/console et ajusté le code en fonction de mes besoins. Cependant chaque fois que je tente de l'exécuter je reçois une erreur:Commande de migration personnalisée laravel "[Illuminate Database Migrations MigrationRepositoryInterface] n'est pas instanciable"

[Illuminate\Contracts\Container\BindingResolutionException] Target [Illuminate\Database\Migrations\MigrationRepositoryInterface] is not instantiable while building [App\Console\Commands\PendingMigrations, Illuminate\Database\Migrations\Migrator].

Le contenu de la classe elle-même et la méthode fire() ne semble pas à la matière, car il ne va pas jusque-là, elle échoue dans la méthode __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() 
    { 
    } 
} 

La raison en est probablement quelque chose à voir avec le conteneur IoC et l'ordre avec lequel les choses sont chargées, mais je ne sais pas assez sur le fonctionnement interne de Laravel à comprendre plus que cette.

Cela doit sûrement être possible?

Je suis actuellement bloqué sur 5.2, donc je ne suis pas sûr si ce problème existe dans des versions plus récentes. La seule chose que j'ai essayée jusqu'ici est d'ajouter le fournisseur de services de migration en haut de la liste dans config/app.php mais il ne semble pas avoir d'affect et c'était juste une supposition aléatoire de toute façon.

providers' => [ 
    Illuminate\Database\MigrationServiceProvider::class,` 
] 

Répondre

4

Je suis autour de cette utilisant:

$this->migrator = app('migrator'); 

mais ce n'est pas nécessairement la meilleure façon de le faire

+2

Je viens de passer 1 heure avec cela. Merci! – Julian

+1

Pas de soucis si vous trouvez un meilleur moyen s'il vous plaît poster une réponse :) – robjbrain