3

Cake PHP は初めてです。問題があります。

モデルには、Guardian、Student、StudentFee の 3 つがあります。

関係は次のようになります。Guardian hasMany Student 、Student hasMany StudentFee、StudentFee belongsTo Guardian、Student.

私の問題は、学生と保護者の詳細が挿入される以外に、StudentFee の詳細が挿入されないことです。

私のモデルは

class Guardian extends AppModel {
    public $name = 'Guardian';

    public $recursive =2;
    public $hasMany = array(
            'Student' => array(
                'className'     => 'Student',
                'dependent'     => true
            )
    );

}

class Student extends AppModel {
    public $name = 'Student';

        public $hasMany = array(
            'StudentFee' => array(
                'className'     => 'StudentFee',
                'dependent'     => true
            )

    );
}

class StudentFee extends AppModel {
    public $name = 'StudentFee';
    public $belongsTo = array(
                    'Guardian' => array(
                    'className'     => 'Guardian',
                    'dependent'     => true
            ),
                'Student' => array(
                    'className'     => 'Student',
                    'dependent'     => true
            )
    );
}

私のコントローラーでは、以下のコードのように saveAssociated() を使用しました

$this->Guardian->set($this->request->data);
$this->Guardian->saveAssociated($this->Guardian->data, array('validate' => false)); 

この問題の解決にご協力ください。よろしくお願いします。

4

1 に答える 1

0

私にとって正しいのは:

モデル

// Guardian
    $hasMany = array(
      'Student' => array('clasName' => 'Student', 'foreignKey' => 'guardian_id')
    );

// Student
    $belongsTo = array(
      'Guardian' => array('clasName' => 'Guardian', 'foreignKey' => 'guardian_id')
    );

    $hasMany = array(
      'StudentFee' => array('clasName' => 'StudentFee', 'foreignKey' => 'student_id')
    );

// StudentFee
    $belongsTo = array(
      'Student' => array('clasName' => 'Student', 'foreignKey' => 'student_id')
    );

あなたのデータ(POST)は、おそらくそのようなものです:

[Guardian] => array(
),
['Student'] => array(
  [0] => array(
    ['StudentFee'] => array(
    )
  ),
  [1] => array(
    ['StudentFee'] => array(
    )
  )
)

したがって、保存するだけです:

// use the deep option to save items after the second level
$this->Guardian->saveAssociated($this->request->data, array('deep' => true));

これがお役に立てば幸いです。試してみて、うまくいくかどうか教えてください。

于 2013-09-24T20:00:53.397 に答える