次のように私のモデル関係がある参加:私は何をしたいかCakePHPの2.1 - 保存(および作成)複数のモデルとそれに関連するモデル
Student hasMany ClassStudent
Class hasMany ClassStudent
ClassStudent belongsTo Student
ClassStudent belongsTo Class
ClassStudent is a join model.
は、学生(複数可)を作成し、既存のクラスを使用するか、作成しているが新しいものを作成し、生徒とクラスをリンクする結合モデルレコードを作成します。
私はこれをすべて1回の呼び出しで保存します(これが可能であれば)。私が試してみました
:
$data = array(
'Student' => array(
'0' => array(...), // Data in here
'1' => array(...),
...,
'n' => array(...)
),
'Class' => array(
'class_id' => x // The class that I want the above students to be associated with
)
)
を私は何をしたいのかは、ユーザーが新しいを追加したい場合は、おそらく同時にクラスを作成(学生のn個のレコードを作成してもクラスに追加されます1)。私はまた、学生レコードを作成する際に、各生徒のクラスへの結合モデルレコードを作成したいと思っています。
これは可能ですか?私はCake 2.1.0(今日の安定版)を使用していますが、$ options ['deep'] = trueでsaveAll(saveAssociatedとsaveMany)の異なるタイプを試しました。
データ配列の形式が正しくない可能性がありますか?
編集:私も試してみました :
上記の場合$data = array(
'ClassStudent' => array(
'0' => array(
'Student' => array (...), // Data
'Class' => array(id => x) // The id of the Class the Student should be associated to
...,
'n' => array(
'Student' => array(...), // n-th Student
'Class' => array(id => x)
)
);
$this->saveAll($data['ClassStudent'], array('deep' => true));
、それが成功した学生のテーブルに新しい学生レコードを作成しますが、何も結合テーブルに作成されません。
Hey Ryan、返信ありがとうございます。私は一度に1つの結合モデルを保存するためにリンクしたメソッドを使用しました。しかし、その場合、私は1つしかやっていませんでした。 複数の結合モデルを同時に作成することはできません。 – user1251202
これは実際にはもっと面白いです。もう少し読んだら、Cakeのドキュメントが混乱を招いているようです。現時点では、クラスアソシエーションを保存することはできますか?ClassStudentモデルのsaveAllを呼び出してください。 –
Hey Ryan、私は上記のデータ形式を試しましたが、動作していないようです。私の呼び出しは、問題があるかどうかは分かりませんが、ClassStudentモデルでは、$ this-> saveAll($ data、array( 'deep' => true)をコールする関数があります。深くない)。私のクラスコントローラでは、$ this-> Class-> ClassStudent-> saveClassStudents($ this-> request-> data)というメソッドを呼び出しています。 データベースをチェックすると、新しいレコードがないことに注意してください。 – user1251202