如何使用find进行连接?

时间:2015-08-07 22:45:29

标签: cakephp-2.0

我有一个包含一些外键的表。该表是:matriculas。在此表中,我有一个表pessoas的外键,在此表pessoas中有一个表tipopessoas的外键。

我尝试创建JOIN以返回tipopessoas的信息,但我无法做到这一点。

我怎么能这样做?

我需要这个

SELECT * FROM pessoas t1
INNER JOIN tipopessoas t2 ON (t1.tipopessoas_id = t2.id)
WHERE t2.descrica = "ALUNO";

我试过这个。

public function add() {
        if ($this->request->is('post')) {
            $this->Matricula->create();
            if ($this->Matricula->save($this->request->data)) {
                $this->Session->setFlash(__('The disciplina has been saved.'));
                return $this->redirect(array('action' => 'index'));
            } 

                        $this->Session->setFlash(__('The disciplina could not be saved. Please, try again.'));

        }


                $this->set("pessoas", $this->Matricula->Pessoa->find("list",array(
                                                                                    "fields"=>array("nome"),
                                                                                    "join"=>array("table"=>"tipopessoas",
                                                                                                  "alias"=>"tipo",
                                                                                                  "type"=>"left",
                                                                                                  "condition"=>array(
                                                                                                                   "Pessoa.tipopessoas_id = " => "tipo.id",
                                                                                                                   "tipo.descricao = " => "ALUNO"
                                                                                                                ))
                                                                            )
                                                                     ));


    }

这里的工作台项目

enter image description here

2 个答案:

答案 0 :(得分:0)

您好@FernandoPaiva可以用此更新查找查询:

$this->Pessoa->find('all', array("fields" => "Pessoa.*, Tipopessoa.*","conditions" => array("Tipopessoa.descrica" => "ALUNO"),
                           "joins" => array(array(
                                "table" => "tipopessoas",
                                "alias" => "Tipopessoa",
                                "type" => "inner",
                                "condition" => array("Tipopessoa.id" => "Pessoa.tipopessoas_id"),

                           )))); 

希望这可能对你有用......

答案 1 :(得分:0)

我设法解决了!

我做了

<强>控制器

public function add() {
        if ($this->request->is('post')) {
            $this->Matricula->create();
            if ($this->Matricula->save($this->request->data)) {
                $this->Session->setFlash(__('The disciplina has been saved.'));
                return $this->redirect(array('action' => 'index'));
            } 

                        $this->Session->setFlash(__('The disciplina could not be saved. Please, try again.'));

        }


                $this->set("pessoas", $this->Matricula->Pessoa->find('list', array(
                                                        'fields' => array("Pessoa.id", "Pessoa.nome", "Pessoa.tipopessoas_id",'Tipopessoa.id','Tipopessoa.descricao'),
                                                        'conditions' => array('Tipopessoa.descricao'=>'ALUNO'),
                                                        'recursive' => 0)));                                       


    }

查看

<div class="form-group">   

                            <?php echo $this->Form->input("pessoas_id", array("empty"=>"Escolha uma opção",                                                                          
                                                                                "style"=>"width:200px",                                                                          
                                                                                "class"=>"form-control",                                                                                                                                                    
                                                                                ));?>

                    </div>