我目前正在使用cakephp 2.2.3。
我有以下模型关联:
VehicleModel - >车辆 - >为了
计划 - >为了
车辆HABTM标签
在车辆控制器内部添加动作,我有:
if(!empty($this->request->data)) {
if($this->Vehicle->saveAll($this->request->data)) {
$this->Session->setFlash('Vehicle was successfully added.');
}
}
$ this-> request->数据数组的格式如下:
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,created,modified。
车辆型号:
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字段,尽管所有其他字段都正常保存。我能做错什么?
答案 0 :(得分: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永远不会包含与主模型的关系,这会让我询问这是您要保存的新记录还是更新?我想你可能不得不在这里使用saveAll,如果你正在设置一个新的记录,因为主要的id还没有设置。请参阅:
特别是:“如果系统中尚未存在关联的模型记录(例如,您希望同时保存新用户及其相关的个人资料记录),那么您将会需要先保存主模型或父模型。“
他们基本上做你正在做的长版本。