7
respostas

Listar dados usando o InnerJoin

Estou com a seguinte dúvida: Quero listar os dados entre duas tabelas.. usando o Join e utilizando o where.. como faço?

7 respostas

Oi Janai, você já deu uma olhada no join na documentação?

Tem um exemplo legalzinho lá: http://api.cakephp.org/3.3/class-Cake.Database.Query.html#_join

Consegui fazer algumas.. mas to com uma situação aqui que estou travado:

tenho que listar os cadidatos a processo seletivo por responsável.. até ai ok.. quando o responsavel esta logado ele visualiza os cadastros feitos por ele..

so que tenho uma tabela de processos onde quando eu cadastro um processo ele verifica o status.. onde o que esta ativo é o com o status = 1

criei o ProcessosTable

e no controller CandidatosControler criei o método:

public function processo(){
        $processosTable = TableRegistry::get('Processos');
        $processo = $processosTable->find('all')
                ->where(['status =' => 1]);

        print_r($processo);

    }

porque vou recuperar o processo ativo pra gravar na tabela candidato..

isso pra evitar que toda vez que tenha um processo eu tenha que dar um truncate nas tabelas..

Você consegue fazer isso com join e where, alias, esse link da documentação mostra como fazer isso. Não entendi onde você esta travando. Você não tem relacionamentos entre estas tabelas?

me tira uma duvida. pra eu executar um query no meu controller.. eu preciso de criar a Table no Model? precisso ter o Controller dessa Table?

Janai, certamente você precisará do model, mas do controller depende. Se você tiver páginas e lógicas para determinado model, é bom que você tenha o controller, porém, se você tem um modelo que não necessariamente precisa ser visualizado de forma direta, você pode não ter um controller.

Em outros casos você pode ter dois modelos, dois controllers mas apenas uma view, depende muito do problema. Você pode ter uma view, que utiliza ações de vários controllers modificando vários modelos.

Vai depender de como estes componentes estão relacionados entende?

Quero retornar o resultado de uma consulta que será apenas uma linha.. tem como fazer sem usar o foreach já que é apenas uma linha?

public function processo(){

        $processosTable = TableRegistry::get('Processos');
        $processo = $processosTable->find('all')
                ->where(['status =' => 1]);
        $this->set('processo',$processo);

        foreach ($processo as $dados){
        echo $id = $dados['codigo'];
        }

    }

Desculpa a demora Janai. Dependendo da versão que você esteja usando do PHP, acho que voce pode fazer o seguinte:

array_walk(function($dados){ echo $dados['codigo'] }, $processo);

testa pra mim?