Oi pessoal, sou nova no desenvolvimento em CakePHP e estou com dificuldade para criar um Join entre tabelas.
O que eu quero é muito simples... Quero listar todos os nomes de usuários (tabela: usuario) que possuem acesso ao sistema (tabela: permissao), porém, existem 3 condições que devem ser atendidas (são campos da tabela permissão: id_sistema= '1', ativo= 'S' e tipo_usuario in (0,1,2)) em resumo quero a seguinte query:
select u.nome_usuario
from usuario as u inner join permissao as p on (u.id_usuario = p.id_usuario)
where p.id_sistema = 1
and p.ativo = 'S'
and p.tipo_usuario in (0,1,2)
Fiz o seguinte em meu código Cake:
// PRIMEIRO NO DIRETÓRIO Model\Table--------------------------------- // ARQUIVO: UsuariosTable.php
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
class UsuariosTable extends Table {
public function initialize()
{
$this->belongsTo('Permissao'); //associo as tabelas
}
?>
// ARQUIVO: PermissoessTable.php
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
class PermissaoTable extends Table {
public function initialize()
{
$this->belongsTo('Usuario')->setForeignKey('id_usuario'); //associo as tabelas
}
?>
//NO CONTROLLER DIRETÓRIO: Controller--------------------------------- //ARQUIVO: UsuariosController.php
<?php
namespace App\Controller;
use Cake\ORM\TableRegistry;
use Cake\View;
class UsuariosController extends AppController {
public function index(){
$usuarioTable = TableRegistry::get('usuario');
$usuarios = $usuarioTable->find()->contain('permissao')->where([
'permissao.id_sistema' => 'A'])->order([
'nome_usuario' => 'ASC']
);
$this->set('usuarios',$usuarios);
}
}
?>
//obs: só coloquei a primeira condição pra iniciar o teste e ver se funciona o join, e já quebrou a página!
Criei a chame primária na tabela usuário (id_usuario) e na tabela permissao ela esta como chave estrangeira!
// Como está no diretório Template\Usuarios\ Arquivo: index.ctp:
<div class="container">
<table class="table table-striped">
<thead>
<tr>
<th>Usuário</th>
</tr>
</thead>
</table>
<table class="table table-bordered">
<tr>
<?php
foreach($usuarios as $usuario){
?>
<tr>
<?= $usuario['nome_usuario']; ?><br>
</tr>
<?php } ?>
</tr>
</table>
</div>
E estou tomando o seguinte erro na tela:
Error
An Internal Error Has Occurred
Sei que o problema está na query com join pois executo um select sem join na tabela usuario e funciona! Alguém poderia me ajudar? Já procurei no Cake Book... tentei outras formas a partir dele porém nda funciona! :-(