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

Where com o Cake

Estou criando uma pagina com o cakephp onde criei as migrations para gerar o banco e atraves do cake bake criei os controllers, view, etc.. estou com a seguinte duvida.. preciso listar dados apenas do usuario q esta logado.. onde encontro a query gerada pelo cake e como coloco uma clausula where nele? meu login esta ok... e ja tenho o id do usuario logado..

5 respostas

Oi Janai, tudo bom?

Acredito que você esteja procurando algo parecido com:

query = $usuarios
    ->find()
    ->where(['id' => $seuId,'outraClausula' => $outroValor ...]);

$usuario = $query->all();

Sempre que você quiser realizar querys mais especificas do que as que o framework ja te oferece, você pode usar o query builder =)

mas onde que sao feita a query quando vc gera o codigo pelo bake?

Normalmente os códigos de acesso ao banco de dados ficam isolados nas classes Repository ou DAO. No caso do cake, esse acesso costuma rolar dentro da propria Model, pois ela realiza o mapeamento da entidade. Então pode ser dentro da propria model mesmo =)

Tipo tenho no meu model o CandidatosTable:

<?php
namespace App\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class CandidatosTable extends Table
{
public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setTable('candidatos');
        $this->setDisplayField('nome');
        $this->setPrimaryKey('id');

        $this->addBehavior('Timestamp');

        $this->belongsTo('Escolas', [
            'foreignKey' => 'escola_id',
            'joinType' => 'INNER'
        ]);
        $this->belongsTo('Midias', [
            'foreignKey' => 'midia_id',
            'joinType' => 'INNER'
        ]);
        $this->belongsTo('Users', [
            'foreignKey' => 'user_id',
            'joinType' => 'INNER'
        ]);
        $this->hasMany('Inscricoes', [
            'foreignKey' => 'candidato_id'
        ]);
        $this->belongsToMany('Deficiencias', [
            'foreignKey' => 'candidato_id',
            'targetForeignKey' => 'deficiencia_id',
            'joinTable' => 'candidatos_deficiencias'
        ]);
    }
public function validationDefault(Validator $validator)
    {
        $validator
            ->integer('id')
            ->allowEmpty('id', 'create');

        $validator
            ->requirePresence('nome', 'create')
            ->notEmpty('nome');

        $validator
            ->requirePresence('rg', 'create')
            ->notEmpty('rg');

        $validator
            ->requirePresence('sexo', 'create')
            ->notEmpty('sexo');

        $validator
            ->date('dt_nascimento')
            ->requirePresence('dt_nascimento', 'create')
            ->notEmpty('dt_nascimento');

        $validator
            ->requirePresence('naturalidade', 'create')
            ->notEmpty('naturalidade');

        $validator
            ->requirePresence('estado', 'create')
            ->notEmpty('estado');

        $validator
            ->requirePresence('pq_escolheu', 'create')
            ->notEmpty('pq_escolheu');

        return $validator;
    }
public function buildRules(RulesChecker $rules)
    {
        $rules->add($rules->existsIn(['escola_id'], 'Escolas'));
        $rules->add($rules->existsIn(['midia_id'], 'Midias'));
        $rules->add($rules->existsIn(['user_id'], 'Users'));

        return $rules;
    }
}

E no meu CandidatosController:

<?php
namespace App\Controller;

use App\Controller\AppController;

class CandidatosController extends AppController
{
public function index()
    {
        $this->paginate = [
            'contain' => ['Escolas', 'Midias', 'Users']
        ];
        $candidatos = $this->paginate($this->Candidatos);

        $this->set(compact('candidatos'));
        $this->set('_serialize', ['candidatos']);
    }
}

Nao estou sabendo como que coloco uma clausula where pra mostrar somente os candidatos cadastrados pelo usuario logado q seria o meu:

$current_user['id'];
solução!

resolvi no Controller:

$candidatos = $this->paginate($this->Candidatos->find()->where(['user_id =' => $this->Auth->user('id')]));