1

Mycakephp のバージョンは 2.1.1 です。

saveAll() 関数を使用して、関連するモデルを手動で保存しようとしています

モデル

  • 従業員 HasOne アドレス
  • 従業員は部門に属しています

だからテーブル

従業員(名、姓、年齢、性別、部門ID)

住所(最初の行、2番目の行、都市、州、employee_id)

従業員の作成 add.ctp には、従業員と住所の入力を受け取るフォームがあります

知っている

$this->Employee->saveAll($this->request->data);

これによりモデルが保存
されますが、関連付けを手動で保存したい

ここで公式のcakephpドキュメントを調べ ていて、このようなことを試しました

        $this->Employee->saveAll($data, array(
            'fieldList' => array(
            'Employee' => array('first_name','last_name','age','sex','department_id'),
            'Department' => array('first_line', 'second_line','city','state','employee_id')
            )
        ));

それは機能しておらず、次のエラーがスローされます

注(8): 未定義の変数: data [APP\Controller\EmployeesController.php、118行目]

警告 (2): array_keys() は、パラメーター 1 が配列であることを期待します。[CORE\Cake\Model\Model.php、1996 行] を指定すると、null になります。

私はcakephp初心者です。私を助けてください。

$this->request->data: 配列

(

[Employee] => Array
    (
        [first_name] => Jack
        [last_name] => Robert
        [age] => 32
        [sex] => 0
        [Department] => Development
    )

[Address] => Array
    (
        [first_line] => HSR Layout
        [second_line] => 1st Cross
        [city] => Najem
        [state] => Barel
    )

[Department] => Array
    (
        [id] => 3
    )

)

4

2 に答える 2

0

いくつかの調査を行った後、私はそれを見つけました。

       $data = array(
         'Employee' => array(
         'first_name' => $this->request->data['Employee']['first_name'],
         'last_name'=>$this->request->data['Employee']['last_name'],
         'age'=>$this->request->data['Employee']['age'],
         'sex'=>$this->request->data['Employee']['sex'],
         'department_id'=>$this->request->data['Department']['id']
        ),
         'Adress' => array(
         'first_line' => $this->request->data['Adress']['first_line'],
         'second_line'=>$this->request->data['Adress']['second_line'],
         'city'=>$this->request->data['Adress']['city'],
         'state'=>$this->request->data['Adress']['state']
        )

    );


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

これでできます。

于 2012-04-12T09:56:43.063 に答える
0

パラメータで配列だけを使用してみてくださいfieldList

$this->Employee->saveAll($this->request->data, array('fieldList' => array('Employee.first_name', 'Employee.last_name', 'Employee.age', 'Employee.sex', 'Department.first_line', 'Department.second_line', 'Department.city', 'Department.state', 'Department.employee_id')));

マニュアルによると、fieldList「保存を許可するフィールドの配列」が必要です。多次元配列は受け付けていないと思います。

$this->request->dataはフォームのすべてのフィールドです。 で確認できますdebug($this->request->data)

于 2012-04-11T09:54:56.823 に答える