2016-07-19 62 views
-3

我一直在试图找出了好几天这个(我想很简单的)事情:SQL查询来CakePHP的翻译

我有三个表具有以下字段:

  1. alumnes:ID ,nomcognoms
  2. grups:ID
  3. alumnesgrups:ID,alumne_id(与Alumnes.id)和grup_id(相关Grups.id)。这是一个透视表(连接表,关系表...)

我的问题是:

我应该代码AvadiariesController.php如果我想填充一个选择框(在add.ctp)从这个查询结果:

SELECT 
alumnes.nomcognoms 

FROM 
alumnes_grups 

INNER JOIN grups ON 
alumnes_grups.grup_id = grups.id 

INNER JOIN alumnes ON 
alumnes_grups.alumne_id = alumnes.id 

WHERE 
alumnes_grups.grup_id = '16-17 2nB' 

ORDER BY 
alumnes.nomcognoms 

我可以从另一个表显示领域? 我怎样才能看到'名字'而不是'id'?

用户Bill好心建议我的东西重写(正确?)到:

$alumnesGrups = $this->Avadiaries->AlumnesGrups->Alumnes->find('list', 
    ['fields' => ['Alumnes.nomcognoms'], // keep the alias consistent with whatever you define in the join 
    'joins' => [['table' => 'alumnes', 
       'alias' => 'Alumnes', 
       'type' => 'INNER', 
       'conditions' => ['Alumnes.id' => 'AlumnesGrups.alumne_id']], 
     // mimic the above to join the other table 
       ['table' => 'grups', 
       'alias' => 'Grups', 
       'type' => 'INNER', 
       'conditions' => ['AlumnesGrups.grup_id' => '16-17 2nB'], 
       'order' => ['Alumnes.nomcognoms' => 'ASC']] 
       ] 
       ] 
    ); 

现在add.ctp没有给出错误,但并未被应用于此条件:

'conditions' => ['AlumnesGrups.grup_id' => '16-17 2nB'] 

我只需要这个起点,所以我可以找出其他一些东西。

回答

0

我终于找到了解决办法阅读本document后。现在

$alumnesGrups = $this->Avadiaries->AlumnesGrups->find('all', [ 
'fields' => ['Alumnes.name'], 
'contain' =>['Alumnes', 'Grups'], 
'conditions' => ['Grups.id =' => 1] 
]); 

我的问题是,我得到{“Alumnes”:{“名”:“安吉拉·史密斯”}},而不只是简单的“安吉拉·史密斯”。我会继续搜索。

0

尝试类似:

$this->AlumnesGrup->find('all', 
    array(
     'fields' => array(
      'Alumne.nomcognoms' // keep the alias consistent with whatever you define in the join 
     ), 
     'joins' => array(
      array(
       'table' => 'alumnes', 
       'alias' => 'Alumne', 
       'type' => 'INNER', 
       'conditions' => array(
        'Alumne.id = AlumnesGrup.alumne_id 
      ), 
      // mimic the above to join the other table 
     ), 
     'conditions' => array(
      'AlumnesGrup.grup_id' => '15-16 2nB' 
     ), 
     'order' => array(
      'Alumne.nomcognoms ASC' 
     ) 
    ) 
); 

为清楚起见,我修改您的查询了一下,是这样的:

SELECT 
alumnes.nomcognoms 

FROM 
alumnes_grups 

INNER JOIN grups ON 
alumnes_grups.grup_id = grups.id 

INNER JOIN alumnes ON 
alumnes_grups.alumnes_id = alumnes.id 

WHERE 
alumnes_grups.grup_id = '15-16 2nB' 

ORDER BY 
alumnes.nomcognoms