2

現在、cakephp 2.2.3 を使用しています。

次のモデル アソシエーションがあります。

VehicleModel -> Vehicle -> 注文

計画 -> 注文

車両 HABTM タグ

Vehicle コントローラー内にアクションを追加します。

if(!empty($this->request->data)) {

    if($this->Vehicle->saveAll($this->request->data)) {

        $this->Session->setFlash('Vehicle was successfully added.');
    }

}

$this->request->data 配列は次のようにフォーマットされます:

array(
    'VehicleModel' => array(
        'category_id' => '2',
        'make_id' => '1'
    ),
    'Order' => array(
        'plan_id' => '2'
    ),
    'Vehicle' => array(
        'vehicle_model_id' => '13',
        'price' => ' 8700',
        'year' => '1994',
        'km' => '100',
        'color' => '61',
        'fuel' => '1',
        'gear' => '20',
        'type' => '51',
        'city' => 'Rio de Janeiro',
        'state' => 'RJ'
    ),
    'Tag' => array(
        'Tag' => array(
            (int) 0 => '69',
            (int) 1 => '11'
        )
    )
)

注文テーブルには次のフィールドがあります。

id 、 plan_id 、 vehicle_id 、作成済み、変更済み。

車両モデル:

class Vehicle extends AppModel {

    public $belongsTo = array('User' , 'VehicleModel');
    public $hasMany = array('Order' , 'Image');
    public $hasAndBelongsToMany = array('Accessory' , 'Tag');
}

注文モデル:

class Order extends AppModel {

    public $belongsTo = array('Vehicle' , 'Part' , 'Plan');

    public $validate = array(
        'plan_id' => array(
            'rule' => 'notEmpty'
        )
    );

}

私が抱えている問題は、他のすべてのフィールドが正常に保存されているにもかかわらず、Order.plan_id フィールドが保存されていないことです。私は何が間違っている可能性がありますか?

4

1 に答える 1

1

明確にするために、複数の保存を手動で行うと、すべてが正常に機能します。つまり、私が書くとき:

$this->Vehicle->save()

次に設定します

$this->request->data['Order']['vehicle_id'] = $this->Vehicle->id

そして最後に

$this->Vehicle->Order->save()

すべてが正常に機能します。私に問題を引き起こしているのはsaveAllです。

その場合は、どこを参照してください$this->request->data['Order']['vehicle_id'] = $this->Vehicle->id。これを上記のvarダンプと比較すると、orderにはメインモデルとの関係が含まれていないため、これが保存しようとしている新しいレコードなのか、それとも更新なのかを尋ねられます。メインIDがまだ設定されていないため、新しいレコードを設定する場合は、ここでsaveAllを使用する必要はないと思います。参照してください:

http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-hasone-hasmany-belongsto

特に:「関連付けられたモデルレコードのどちらもシステムにまだ存在しない場合(たとえば、新しいユーザーとそれに関連するプロファイルレコードを同時に保存する場合)、最初にプライマリモデルまたは親モデルを保存する必要があります。」

彼らは基本的にあなたがしている長いバージョンをします。

于 2013-03-19T05:40:40.020 に答える