[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
FABRICCIO VIANA
Criador FABRICCIO VIANA 14/10/2018

Olá,

Na aula de numero 12 do  Curso Laravel Multi-Tenancy Multi Database (referência: aos 05:58), meu código retorna uma Exception The "id" argument does not exist, dessa forma não executa a migration no Banco de Dados criado.

Links dos prints:

Print do código: https://ibb.co/c6i6y0

Print do erro: https://ibb.co/jpG4kf

Manager Carlos Ferreira 14/10/2018

Salve, Fabricio!
Tudo bem?

Na classe RunMigrationsTenant aquele debug seu retorna o objeto de Company corretamente?
dd($company);

Ou esse objeto está null (acho que não!).

Ou tem algum erro de implementação no comando criado tenants:migrate

Carlos Ferreira
Criador FABRICCIO VIANA 14/10/2018

Boa noite,

Acredito que o objeto Company esteja funcionando corretamente, segue print do debug(https://ibb.co/kMH3D0);

A migration também acredito estar ok, pois quando executo direto no terminal ela funciona( print do código https://ibb.co/crFC6L | print da execução https://ibb.co/jJ1kRL);

Também testei uma variação usada na implementação da migration, mas retorna o mesmo erro (print https://ibb.co/kzuTff );

Symfony \ Component \ Console \ Exception \ InvalidArgumentException
The "id" argument does not exist.

Estou usando a versão 5.5 do Laravel será que pode ser isso? Se for tem uma alternativa para essa versão? 

 

FABRICCIO VIANA
Manager Carlos Ferreira 14/10/2018

Seu objeto de $company está OK;

O seu TenantMigration está faltando receber o ID.

Na assinatura do comando!

Ou seja, seu comando não está preparado para receber o ID, está incompleto o seu comando...
Segue a classe completa:
namespace App\Console\Commands\Tenant;

use Illuminate\Support\Facades\Artisan;
use App\Models\Company;
use App\Tenant\ManagerTenant;
use Illuminate\Console\Command;

class TenantMigrations extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'tenants:migrations {id?} {--refresh}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Run Migrations Tenants';

    private $tenant;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct(ManagerTenant $tenant)
    {
        parent::__construct();

        $this->tenant = $tenant;
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        if ($id = $this->argument('id')) {
            $company = Company::find($id);

            if ($company)
                $this->execCommand($company);

            return;
        }

        $companies = Company::all();

        foreach ($companies as $company) {
            $this->execCommand($company);
        }
    }

    public function execCommand(Company $company)
    {
        $command = $this->option('refresh') ? 'migrate:refresh' : 'migrate';

        $this->tenant->setConnection($company);

        $this->info("Connecting Company {$company->name}");

        Artisan::call($command, [
            '--force' => true,
            '--path' => '/database/migrations/tenant',
        ]);

        $this->info("End Connecting Company {$company->name}");
        $this->info('-----------------------------------------');
    }


}

Carlos Ferreira
Criador FABRICCIO VIANA 14/10/2018

Obrigado resolveu !

FABRICCIO VIANA
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!