Orm CAKEPHP3在联接表中保存额外数据

Orm CAKEPHP3在联接表中保存额外数据,orm,save,cakephp-3.0,Orm,Save,Cakephp 3.0,需要修改$this->request data中的数据,因此我无法直接使用表单填充所有表。在我添加“state”列之前,所有代码都已经过了烘焙 我正在从$this->request data获取ID,并相应地修改它: $this->request->data['parts']['u id'][]=。。。。 其余部分按照手册执行: $order=$this->Orders->newEntity(); $this->Orders->patchEntity($order$this->request-

需要修改
$this->request data
中的数据,因此我无法直接使用表单填充所有表。在我添加“state”列之前,所有代码都已经过了烘焙

我正在从
$this->request data
获取ID,并相应地修改它:

$this->request->data['parts']['u id'][]=。。。。
其余部分按照手册执行:

$order=$this->Orders->newEntity();
$this->Orders->patchEntity($order$this->request->data);
$this->Orders->save($order);
我无法修改传入数据以将其保存到状态列

编辑:

“状态”字段仍为空值

订单稳定

订单稳定

插入:


我必须将aslo SetsModel包括在关联模型中

$this->request->data['parts']['u id']允许您连接表,但不能以这种方式添加数据。 为此,您的$this->request->data['parts']结构必须如下所示:

'parts' => [
    0 => [
        'id'=> 1,
        '_joinData' => [
            'state' => 'exampleSate'
        ]
    ]
]
确保“部件”数组中不再有“\u id”数组,否则将无法将数据保存到联接表中。
“id”字段对应于相关零件的id。要设置它,请执行以下操作:

$this->request->data['parts'][0]['id'] = <idOfTheConcernedPart>;
最后,您需要告诉cakephp您正在通过向patchEntity和save方法添加一些配置来保存一些_joinData:

$this->Orders->patchEntity(
    $order, 
    $this->request->data, 
    ['associated' => ['Parts._joinData']]
);

$this->Orders->save(
    $order, 
    ['associated' => ['Parts._joinData']]
);
我希望有帮助,

干杯。

我已经编辑了主要问题,因为我仍然没有得到预期的结果。您忘记了输入id字段:$this->request->data['parts'][0]['id']=;谢谢你说得更清楚。我发现,$this->request->数据格式不正确(因此无法填充state列)。再次感谢。
$order = $this->Orders->newEntity();
$order->status = 'new';
$order->user_id = $this->Auth->user('id');
$this->request->data['parts'][0]['_joinData']['state'] = "whatever";
$this->Orders->patchEntity(
$order,
$this->request->data,
['associated' => ['Sets','Parts._joinData']]
);

$this->Orders->save(
$order,
['associated' => ['Sets','Parts._joinData']]
);
'parts' => [
    0 => [
        'id'=> 1,
        '_joinData' => [
            'state' => 'exampleSate'
        ]
    ]
]
$this->request->data['parts'][0]['id'] = <idOfTheConcernedPart>;
$this->request->data['parts'][0]['_joinData']['state'] = "whatever";
$this->Orders->patchEntity(
    $order, 
    $this->request->data, 
    ['associated' => ['Parts._joinData']]
);

$this->Orders->save(
    $order, 
    ['associated' => ['Parts._joinData']]
);