0

私はCakePHPを学び始めたばかりで、この状況で助けが必要です。

私は1つのテーブル(Student)と、複数の値(MBA、MCA、BCA、BA、PHD)を持つことができる「EducationalQualification」と呼ばれる1つのプロパティを持つ対応するモデル(Student)を持っているので、すべてのリストを含むマスターテーブルを作成しました度。

今、学生が自分自身を登録しようとしているとき、彼は資格で複数のオプションを選択する必要があります。

ビューのデータベースから複数のオプションとしてDegreeMstデータを取得したい。私の質問は、この多対多の関係で、新しいモデルDegreeMstを作成してから、Studentモデルとの多対多の関係を作成する必要があるということです。

または、新しいModelDegreeMstを作成せずにこれを行うことはできますか

4

1 に答える 1

2

何よりもまず、MVCフレームワークでモデルを作成せずにテーブルからデータをフェッチする必要がある場合は、何か間違ったことをしている可能性があります。

実際に5つの可能な値(MBA、MCA、BCA、BA、PHD)しかない場合は、おそらく、has_mba、has_mcaなどの5つの個別のtinyint(1)フィールドを作成します。ビュー内のそれぞれが個別のチェックボックスとして表示されます。それがおそらく最も簡単な方法です。

それをしたくなくて、間違いなく別のDegreeMstテーブルが必要な場合は、 hasAndBelongsToMany関係が必要になります。

Student_id列とdegreemst_id列を持つstudents_degreemstsのような個別の結合テーブルが必要になります。結合テーブルのモデルを作成する必要はありません。

設定すると、チェックボックスを出力するためのビューのコードは次のようになります。

echo $this->Form->input('Student.DegreeMst',array('label'=>'Select your degrees','multiple'=>'true'));

アップデート

3つのデータベーステーブルと2つのモデルが必要です。多対多(つまり、CakeがhasAndBelongsToManyと呼ぶもの)の関係と結合テーブルについて知っていますか?

データベースには、CakePHPの信念に従って名前が付けられた3つのテーブルが必要です。

学生(id、name、address、other_field)
度(id、name、another_field)
students_degrees(id、student_id、degree_id)

最後のテーブルは参加テーブルであり、学生と学位テーブルへの2つの外部キーが含まれている必要があります。CakePHPでは、結合テーブルにモデルやコントローラーは必要ありません。

明らかに、Studentsテーブルのモデルが必要です。ここで、hasAndBelongsToMany関係を定義します。

public $hasAndBelongsToMany = array(
    'Degree' => array(
        'className' => 'Degree',
        'joinTable' => 'students_degrees',
        'foreignKey' => 'student_id',
        'associationForeignKey' => 'degree_id',
    ),
);

度数テーブルのモデルも必要ですが、必要でない限り、そのモデルでhasAndBelongsToMany関係を再度定義する必要はありません。

于 2013-02-21T09:47:18.537 に答える