1

テーブルの構造から始めます。hasOne リレーションシップを使用して Tutors テーブルにリンクされた Contacts テーブルがあります。Tutors テーブルは、結合テーブルとして Disciplines_Tutors との HABTM リレーションシップを使用して Disciplines テーブルとリンクされます。これで、Contacts 属性と Tutors 属性の両方が 1 つの統合された連絡先フォームにまとめられました。Disciplines テーブル属性についても同様です。連絡先とチューターをそれぞれのテーブルに保存できますが、Disciplines_Tutors 結合テーブルに保存できません。

以下は、理解しやすいようにテーブル構造です。

テーブル構造

先生の追加フォームから保存する場合、この問題は発生しません。完璧に保存されます。

連絡先テーブルには、id、独自の属性があります Tutors テーブルには
、id、独自の属性、contact_id
があります Disciplines テーブルには、id、discipline
Disciplines_Tutors テーブルには、id、discipline_id、tutor_id があります

統合された連絡フォームでは、利用可能な分野を表示して選択することができます。ただし、保存する場合、結合テーブルには保存されません。

家庭教師モデル:

public $hasAndBelongsToMany = array(
    'Discipline' => array(
        'className' => 'Discipline',
        'joinTable' => 'disciplines_tutors',
        'foreignKey' => 'tutor_id',
        'associationForeignKey' => 'discipline_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

規律モデル:

public $hasAndBelongsToMany = array(
    'Tutor' => array(
        'className' => 'Tutor',
        'joinTable' => 'disciplines_tutors',
        'foreignKey' => 'discipline_id',
        'associationForeignKey' => 'tutor_id',
        'unique' => 'keepExisting',
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'finderQuery' => '',
        'deleteQuery' => '',
        'insertQuery' => ''
    )
);

DisciplinesTutor モデル:

public $belongsTo = array(
    'Tutor' => array(
        'className' => 'Tutor',
        'foreignKey' => 'tutor_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Discipline' => array(
        'className' => 'Discipline',
        'foreignKey' => 'discipline_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

ContactsController には次のものがあります。

    $disciplines = $this->Contact->Tutor->Discipline->find('list');

public function add セクションで。したがって、選択リストの検索が可能になります。

Tutors、Disciplines、DisciplinesTutors コントローラはすべて saveAll メソッドを利用しています。

統合された連絡先フォームの追加フォーム。それは持っています:

echo $this->Form->input('Tutor.Discipline',array('type'=>'select','multiple'=>true));

これにより、選択する分野のリストを取得できます。

他にどのような情報が必要かわかりません。お気軽にお尋ねください。この質問に追加します。

また、私は CakePHP にまったく慣れていないので、簡単に教えてください。

ありがとうございました!

4

1 に答える 1

2

'deep' => true複数の関連付けられたレコードを保存するには、saveAll() メソッドでオプションを使用する必要があります。次のコードを試して、複数の関連データを保存できます。

 $this->Contact->saveAll($this->data, array('deep' => true));

saveAssociated()メソッドを使用して試すこともできます。

メソッドを介して連絡先を選択しているときに結果を取得しているのと同じ配列を受け取っている場合にのみ機能しますfind()

于 2012-08-20T04:21:00.407 に答える