Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Onde colocar certos métodos, no Model ou Controller?

Olá pessoa! Terminei o curso faz um tempo, comecei um projeto pessoal, e agora me vêm certas dúvidas. Estou criando alguns métodos de criação de databases e migração delas, são databases dos Clientes, que é um model. Primeira dúvida, é mais organizado criar um DatabaseController para gerenciar? Métodos que não retornem views, devem ficar em um Model ou posso deixar no Controller?

Vocês têm algum local onde tenham dicas do que colocar e o que não colocar em cada um?

Vou anexar os meus códigos para vcs darem uma olhada, o código abaixo está em um ClienteController:

       private function iniciarBancoCliente(Cliente $cliente)
    {
        //Migra um banco vazio
        $this->migrarBancoCliente($cliente);
        ClienteController::setTenantDatabaseName("");
    }

    //Migra o banco do parâmetro cliente
    private function migrarBancoCliente(Cliente $cliente)
    {
        ClienteController::setTenantDatabaseName($cliente->database_name);
        Artisan::call('migrate',['--database'=>'mysql_tenant','--path'=>'app/database/migrations/tenant']);
        DB::disconnect('mysql_tenant');
    }

    //Atualização dos bancos
    private function atualizarTodosBancosClientes()
    {
        $clientes = Cliente::all();
        foreach($clientes as $cliente){
            $this->migrarBancoCliente($cliente);
        }
        ClienteController::setTenantDatabaseName("");
    }

    public static function setTenantDatabaseName($name)
    {
        Config::set('database.connections.mysql_tenant.database', $name);
    }
4 respostas

Olá Maxranderson,

Ao meu ver ao invés de criar DatabaseController pode-se criar uma pasta com o nome de Services e colocar esse arquivo, com um nome melhorzinho, la.

Quanto a segunda pergunta podem ficar nos dois, podemos ter métodos privados em controllers como também podemos ter métodos nos models, geralmente deixo os models bem limpos, vai da sua necessidade.

Você sempre pode acessar https://laravel.com/docs/5.4 para mais informações.

Att,

solução!

Boa tarde!

Cara, tudo o que não retorna uma view, eu costumo não utilizar em controllers.

No caso de funções especificamente para banco de dados, eu coloco cada coisa no seu model.

E funções mais genéricas, eu costumo colocar em providers.

Desta forma tudo que é de banco de dados fica em um lugar, e os demais que não retornam view ficam em providers.

Por exemplo, em providers eu costumo colocar funções para consulta de API externa, processamento de imagens com GD, e coisas assim. Que posso precisar em diversos locais da aplicação.

Onde tem várias dicas boas de Laravel é no site: http://awesome-br.com/#/laravel

Mas o site raiz: http://awesome-br.com

Tem diversas dicas de várias tecnologias.

Abraços.

Adriano, tava pensando em uma coisa parecida, pensei em criar um Static Model para ficar responsável pela lógica de criação e migração dos bancos dos clientes.

Sim, pode ser também.

Fica mais separado ainda, e tem a vantagem de ser um model, ou seja, ainda é relacionado ao banco de dados.