0

Scale と Step の 2 つのモデルがあり、Scale モデルには多くの Step があります。db テーブルは次のとおりです。

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

構文について教えてください。

4

2 に答える 2

1

データベース構造を変更することをお勧めします。Scale で Step を s1、s2、s3... などにバインドするのではなく、これにはいくつかの欠点があります。そのうちの 1 つは、Scale ごとに 7 ステップのみに制限され、実際には適切なリレーショナル データベース モデルではないことです。 ScaleSteps のような名前の 3 番目のテーブルを作成し、3 つの列を作成することをお勧めします。

id | ScaleId | StepId

ID が 7 の Scale エントリがあり、Scale に Step エントリ 1、2、および 3 が関連付けられているとします。結果のテーブルは次のようになります。

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

次に、hasOne、belongsTo などを使用して CakePHP モデルの関係をセットアップします。例:

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

class ScaleStep extends Model {
var $name = "ScaleStep";
var $belongsTo = "Step";    
}
于 2013-02-09T15:14:59.597 に答える
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.'')
        ));
于 2013-02-09T15:21:44.867 に答える