2013-02-09 126 views
0

我有2个模型缩放和步骤,其中模型缩放有很多步骤。 的数据库表是:cakephp翻译查询cakephp模型查询

scale : id | name | s1 | s2 | s3 | s4 | s5 | s6 | s7 
step : id | val 

我想写在CakePHP的结构下面的查询......

select s.id, s1.val as v1, s2.val as v2, s3.val as v3, s4.val as v4, s5.val as v5, s6.val as v6, s7.val as v7 
from scale s 
join step s1 on s.s1 = s1.id 
join step s2 on s.s2 = s2.id 
join step s3 on s.s3 = s3.id 
join step s4 on s.s4 = s4.id 
join step s5 on s.s5 = s5.id 
join step s6 on s.s6 = s6.id 
join step s7 on s.s7 = s7.id 

能否请你帮我的语法?

回答

0
$this->find('all', array(

     'fields' => array('s1.val', 's2.val'), 
     'joins' => array(array(
      'table' => 'step', 
      'alias' => 's1', 
      'type' => 'inner', 
      'conditions' =>array('Scale.s1 = s1.id') 
      ),array(
      'table' => 'step', 
      'alias' => 's2', 
      'type' => 'inner', 
      'conditions' =>array('Scale.s2 = s2.id') 
      ), 
     ), 
     'conditions' => array('Scale.id = '.$id.'') 
     )); 
1

我建议你也许改变你的数据库结构。 Scale不是将Step绑定到Scale中的s1,s2,s3等等,它有一些缺点,其中之一就是它将每个Scale限制为只有7个步骤,并且它不是一个很好的关系数据库模型,我建议你创建一个第三个表,称为像ScaleSteps,并有三列:

id | ScaleId | StepId 

试想您有相关的7 ID的规模进入,而且规模有步骤项1,2,与之相关联的3,得到的表是这样的:

id | ScaleId | StepId 
1 | 7  | 1 
1 | 7  | 2 
1 | 7  | 3 

然后使用设置你的CakePHP模型关系:hasOne,属于...等,例如:

class Scale extends Model { 
var $name = "Scale"; 
var $hasMany = "ScaleStep"; 
} 

class ScaleStep extends Model { 
var $name = "ScaleStep"; 
var $belongsTo = "Step";  
} 
+0

重要的是你的答案。我希望规模实际上被限制在只有七个步骤,这就是为什么我这样设计它。我其实想通了...... – 2013-02-09 15:21:17

+0

没问题。我认为我得到了belongsTo,并且在我的答案中混杂了:)无论如何,很高兴你解决了它。 – Crwydryn 2013-02-09 15:48:30