0

Employee と Schedule の間に hasMany 関係があります。従業員を編集するとき、現在のスケジュールを取得してフォームに入力することができました。

保存時に、次を使用します。

        if ($this->Employee->save($this->request->data)) {
            $this->Employee->Schedule->save($this->request->data, $validate = false);
            ....
        }

従業員データは正常に保存されますが、スケジュール レコードはそのまま残ります。

私は実際にIDを配列の一部として提供しています。私のコントローラでは、debug($this->request->data) が表示されます:

array(
'Employee' => array(
    'emp_position' => '1',
    'name' => 'the name',
    'emp_gender' => '1',
    'emp_father' => '',
    'emp_mother' => '',
    'emp_dob' => 'October 13, 1964',
    ...
    ..
),
'Schedule' => array(
    (int) 0 => array(
        'id' => '7',
        'ho_lu2' => '10:00',
        'ho_ma2' => '01:00',
        'ho_mi2' => '00:00',
        'ho_ju2' => '00:00',
        'ho_vi2' => '00:00',    
        'ho_do4' => '00:00'
    )
)
)           

.

***************** Update ************

2つのテーブルで外部キーが異なることに関係していると思います

私の従業員テーブル:

CREATE TABLE IF NOT EXISTS `employees` (
  `id` int(5) DEFAULT NULL,
  `emp_appserial` int(5) unsigned NOT NULL AUTO_INCREMENT,
  ...

(Employee テーブルでは、emp_appserial が私の pk autoincr であり、一部のレコードでは employee_id が null になる可能性があることに注意してください)

私のスケジュール表:

CREATE TABLE IF NOT EXISTS `schedules` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `employee_id` int(5) unsigned NOT NULL,
  ...

別のフィールドを使用してこれらのテーブルをリンクしたので、foreignKey を使用します。

私のモデルでは、リンクしました: 従業員モデル:

        var $hasMany = array(
            'Schedule' => array(
                'foreignKey' => 'employee_id',  //(field on Schedule)
                'dependent' => true
            )
        );

        public $primaryKey = 'emp_appserial'            

スケジュール モデル:

var $belongsTo = array('Employee',
    'Employee' => array(
        'foreignKey' => 'emp_appserial'    //(field on Employee)
    )
);

投稿されたデータに、Schedule の employee_id と Employee の emp_appserial が含まれるようになりました

array(
'Employee' => array(
    'id' => null,
    'emp_appserial' => '119'
    ...
),
'Schedule' => array(
    (int) 0 => array(
        'id' => '6',
        'name' => 'segundo horario',
        'emp_appserial' => '119',   
        'employee_id' => '119'
    )
)
)           

(私の運を試すために、ID とシリアルの両方をスケジュールに追加しようとしましたが、良くありません。)

どんな助けでも大歓迎です。

どうもありがとう !

4

1 に答える 1

0

「原則として、hasOne、hasMany、belongsToの関連付けを使用する場合は、キーイングがすべてです」-CakePHPマニュアル。

Employee配列はidを渡す必要があり、schedule配列はemployee_idを持っている必要があるため、cakeはリンクされたモデルを認識します。

于 2012-10-20T07:54:21.443 に答える