[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Rikson
Criador Rikson 28/03/2023
  public function setConnection(Company $company )
    {
       
            DB::purge('tenant');

            config()->set('database.connections.tenant.database',$company->bd_database);
            config()->set('database.connections.tenant.host',$company->bd_hostname);
            config()->set('database.connections.tenant.username',$company->bd_username);
            config()->set('database.connections.tenant.password',$company->bd_password);

            DB::reconnect('tenant');

            Schema::connection('tenant')->getConnection()->reconnect();


    }
 
 
TENANTMIGRATIONS.PHP
    public function handle(): void
    {
        $companies = Company::all();
       
       
        foreach($companies as $company ){
           
            // dd($company->bd_database);
            $this->info("Connecting Company {$company->nome}");

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

            Artisan::call('migrate',[
                '--force' =>true,
                '--path' => '/database/migrations/tenant',
            ]);
            $this->info("End Connecting Company {$company->nome}");
            $this->info("--------------------------------------------");

        }
    }
 
 
O dd comentato aparece o nome da base, que está criata, porem ele salva na base principal
 
Manager Carlos Ferreira 28/03/2023

Olá, Rikson!1
Tudo bem?

Criar o novo banco de dados, criou, certo?

O problema está sendo em alternar a conexão e rodar os migrations em cada base, seria isso mesmo?
Se sim, teve algum erro? Qual?

Carlos Ferreira
Criador Rikson 28/03/2023

Ele está alternando perfeitamente, 

 

 public function handle(): void
    {
        $companies = Company::all();
       
       
        foreach($companies as $company ){
           
            // dd($company->bd_database);
            $this->info("Connecting Company {$company->nome}");

            $this->tenant->setConnection($company);
             dd(config('database.connections.tenant.database'));

            Artisan::call("migrate",[
                "--force" => true,
                "--path"  => "/database/migrations/tenants",
            ]);
            $this->info("End Connecting Company {$company->nome}");
            $this->info("--------------------------------------------");

        }
    }
 
Observe que eu coloquei um dd no config
 
PS C:\laravel\sisfrota-multitenancy> php artisan tenants:migrations Connecting Company Prefeitura Municipal de Zabelê "sisfrota_zabele_pm" // app\Console\Commands\Tenant\TenantMigrations.php:51 PS C:\laravel\sisfrota-multitenancy>
 
Aparece o nome da Base de dados "sisfrota_zabele_pm", que já está criada
Rikson
Manager Carlos Ferreira 28/03/2023

Fiz um teste aqui, nas versões mais recentes do Laravel não precisa do:
DB::purge('tenant');

Basta remover isso e vai dá certo para alternar de database.

Carlos Ferreira
Criador Rikson 28/03/2023

Continua sem crias as tabelas, a alternação de base está ok.

retire o DB::purge('tenant');  Mas ainda não funciona  :-(

 

 

Rikson
Manager Carlos Ferreira 28/03/2023

Nenhum erro? Coloca o código no GitHub, que vou me organizar para rodar ele em minha maquina.

Carlos Ferreira
Criador Rikson 28/03/2023

Oi professor, não posso colocar no gitHub pois esse projeto é uma refatoração de um sistema de uma empresa ao qual eu trabalho, quem faz essa parte é o setor de desenvolvimento web da empresa.    :-0

Rikson
Criador Rikson 28/03/2023

Professor, encontrei o erro mas só consegui resolver manualmente. Veja o que está ocorrendo:

 

Quando eu rodo "php artisan tenants:migrations"   ele reclama que na base não existe a tabela migrations. Criei essa tabela manualmente

 

CREATE TABLE IF NOT EXISTS `migrations` (

  `id` int unsigned NOT NULL AUTO_INCREMENT,

  `migration` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,

  `batch` int NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

 

 

rodei o comando artisan e ele funcionou. Como resolver esse problema?

 

Rikson
Criador Rikson 28/03/2023

"SQLSTATE[42S02]: Base table or view not found: 1146 Table 'sisfrota_company_pm66c.migrations' doesn't exist (Connection: tenant, SQL: select `migration` from `migrations` order by `batch` asc, `migration` asc)"

 

criando a tabela manualmente de "migrations" como citado acima ele funciona tranquilo. Aguardando resposta para dar continuidade no projeto. Desde já agradeço.

 

Rikson
Manager Carlos Ferreira 28/03/2023

Opa Rikson!

Experimenta definir a estrutura dessa tabela que você criou manualmente em database/migrations/tenants/

Porque assim você fixa a tabela de migrations também.

Pegou a ideia amigo?

Carlos Ferreira
Criador Rikson 28/03/2023

Bom dia/tarde/noite a todos.

 

Diga professor, tudo bem com o senhor?

O problema é um pouco mais complicado.

Quando vou gerar as migrations(tenants:migrations) dos tenants (com a base já criada), ele reclama que na base  não existe a tabela "migrations",  como poderia existir uma tabela sendo que a migration nem foi rodada ainda? Consegui explicar?

Rikson
Criador Rikson 28/03/2023

KKKKKKKKKKKKKKKKKK,

 

 

Entendi agora o que o senhor falou (tinha lido mas não compreendido kkkkkkkkkkk bug total aqui no meu juízo). Valeu professor, vou tentar e posto aqui qualquer coisa. 

Abraços

Rikson
Criador Rikson 28/03/2023

Bom dia/tarde/noite/madrugada a todos

Professor fiz o que o senhor indicou mas não functionou.

    public function up(): void
    {
        Schema::create('migrations', function (Blueprint $table) {
            $table->id();
            $table->string('migration');
            $table->tinyInteger('batch');
        });
    }

 

Coloquei a criação da tabela migration no inicio das migrations do diretório migrations/tenant(como se fosse a primeira a ser criada e não funcionou,depois dessa tentativa eu a renomeei colocando-a no final), mesmo assim deu erro.

 

O senhor teria mais alguma idéia para que eu possa testar?

 

 

 

 

Rikson
Manager Carlos Ferreira 28/03/2023

Qual foi o erro amigo?
Compartilha comigo os detalhes, que te ajudo a resolver.

Carlos Ferreira
Criador Rikson 28/03/2023

Continua o mesmo erro :

""SQLSTATE[42S02]: Base table or view not found: 1146 Table 'sisfrota_company_pm66c.migrations' doesn't exist

(Connection: tenant, SQL: select `migration` from `migrations` order by `batch` asc, `migration` asc)""

Rikson
Manager Carlos Ferreira 28/03/2023

Criando a tabela manualmente, tudo funciona, certo?

Pior que precisaria ter uma visão mais ampla do código para conseguir te ajudar.

Carlos Ferreira
Criador Rikson 28/03/2023

Sim,

No caso o projeto criaria somente a base de dados automaticamente, as migrations seriam criadas manualmente(aquela velha história do caminho das pedras).  Vou continuar pesquisando para tentar desvendar esse mistério.

Rikson
Manager Carlos Ferreira 28/03/2023

Beleza amigo, depois se quiser subir um esboço apenas do projeto, eu simulo aqui e te ajudo a resolver.

Abraços []'s

Carlos Ferreira
Criador Rikson 28/03/2023

Valeu professor, assim que eu tiver um tempinho faço isso.

 

Seria interessante resolver essa questão inclusive para futuros desenvolvedores que poderão ter esse problema, vi que nessa aula teve muitos tickets abertos com relação a esse problema.

 

Mais uma vez muito obrigado, assim que eu subir o sistema eu aviso aqui.

Rikson
Criador Rikson 28/03/2023

Professor, tudo bem com o senhor?

Encontrei a solução para o problema.

 

o seguinte:  

na tabela companies os tributos abaixo devem ficar assim :

bd_hostname = 127.0.0.1

bd_username = root

bd_password = ''

 

 

 

Rikson
Manager Carlos Ferreira 28/03/2023

Ah sim, perfeito.

É porque você não está usando Docker, certo?

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!