0

私が抱えている問題を説明するために、例を使用します。学生が放課後のクラスに申し込むことができるシステムを構築しているとしましょう。しかし、それが有効であるためには、管理者が申し込みを承認する必要があります。だから私はこれらのモデルを持っています:

  • カレンダー(「Teacher」、hasAndBelongsToMany「Student」に属します)
  • 学生(hasAndBelongsToMany "Calendar")
  • 先生(hasMany "Calendar")

ここで、9年生向けの未承認のサインアップすべてのリストを見たいとしましょう。リストにカレンダーの日付、生徒の名前、教師の名前を含めたいです。私はこのようなことをします:

$this->request->data = $this->Student->CalendarsStudent->find('all', array(
    'conditions' => array(
        'CalendarsStudent.is_approved' => null,
        'Student.grade' => 9
    )
));

上記のコードの問題は、返された配列に教師の名前がないことです。

Array
(
    [0] => Array
        (
            [CalendarsStudent] => Array
                (
                    [id] => 1274
                    [calendar_id] => 200
                    [student_id] => 872
                    [is_approved] => 
                )

            [Calendar] => Array
                (
                    [id] => 200
                    [date] => 2012-12-17
                    [teacher_id] => 1
                    [total_slots] => 15
                )

            [Student] => Array
                (
                    [id] => 872
                    [teacher_id] => 1
                    [first_name] => Billy
                    [last_name] => Smith
                    [grade] => 9
                )

        )

)

パラメータに追加'recursive' => 2すると、find情報が多すぎます。私が欲しいものですが、私が欲しくないものもあり$this->request->data[0]['Calendar']ます。また、私が望まないサブアレイがあります。これは修正されるようですが、私もそれを機能させることができません。[Teacher][Student]$this->request->data[0]['Student']Containable

何か案は?

4

1 に答える 1

2

CakePHPの[ContainableBehavior]を使用してください。それは驚くべきことです-使いやすく、あなたが望むものは何でも返します。

補足:「再帰的」を-1以外のものとして使用している場合は、危険信号である必要があります。Containableは、返されるデータを簡単かつ正確に指定できるため、絶対的な方法です。再帰は、多くの場合、メモリの問題やその他の問題を引き起こします。

ベストプラクティスIMO: AppModel.phpに 設定$recursive = -1;し、他の何にも設定しないでください...これまでに。

于 2012-12-11T16:21:52.917 に答える