CakePHP 3 在连接中保存额外数据 table
CakePHP 3 save extra data in join table
来自$this->request-data
的数据需要修改,所以我不能直接使用表格填充所有表格。在我添加列 "state".
之前,所有代码都已烘焙
order_id int(11) PK
part_id int(11) PK
state varchar(10)
我正在从 $this->request-data
获取 ID 并相应地修改它:
$this->request->data['parts']['_ids'][]=....
剩下的按照手册做:
$order = $this->Orders->newEntity();
$this->Orders->patchEntity($order, $this->request->data);
$this->Orders->save($order);
我无法修改传入数据以将其保存到 状态列
编辑:
"state" 字段仍为空值。
订单表
public function initialize(array $config)
{
parent::initialize($config);
$this->table('orders');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER',
]);
$this->belongsToMany('Parts', [
'foreignKey' => 'order_id',
'targetForeignKey' => 'part_id',
'joinTable' => 'orders_parts',
'through' => 'OrdersParts',
]);
$this->belongsToMany('Sets', [
'foreignKey' => 'order_id',
'targetForeignKey' => 'set_id',
'joinTable' => 'orders_sets',
]);
}
订单表
public function initialize(array $config)
{
parent::initialize($config);
$this->table('parts');
$this->displayField('name');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Orders', [
'foreignKey' => 'order_id',
'joinType' => 'INNER',
]);
$this->belongsToMany('Orders', [
'foreignKey' => 'part_id',
'targetForeignKey' => 'order_id',
'joinTable' => 'orders_parts',
]);
$this->belongsToMany('States', [
'foreignKey' => 'part_id',
'targetForeignKey' => 'state_id',
'joinTable' => 'parts_states'
]);
}
插入:
$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']]
);
我必须将 aslo SetsModel 包含到关联中。
$this->request->data['parts']['_ids'] 允许您加入 tables 但您不能通过这种方式添加数据。
为此,您的 $this->request->data['parts'] 结构必须如下所示:
'parts' => [
0 => [
'id'=> 1,
'_joinData' => [
'state' => 'exampleSate'
]
]
]
确保您的 'parts' 数组中不再有 '_ids' 数组,否则您将无法将数据保存到您的联接 table。
'id' 字段对应相关 Part 的 id。设置它:
$this->request->data['parts'][0]['id'] = <idOfTheConcernedPart>;
要设置您的 'state' 字段,只需执行:
$this->request->data['parts'][0]['_joinData']['state'] = "whatever";
最后,您需要通过向 patchEntity 和保存方法添加一些配置来告诉 cakephp 您正在保存一些 _joinData :
$this->Orders->patchEntity(
$order,
$this->request->data,
['associated' => ['Parts._joinData']]
);
$this->Orders->save(
$order,
['associated' => ['Parts._joinData']]
);
希望对您有所帮助,
干杯。
来自$this->request-data
的数据需要修改,所以我不能直接使用表格填充所有表格。在我添加列 "state".
order_id int(11) PK
part_id int(11) PK
state varchar(10)
我正在从 $this->request-data
获取 ID 并相应地修改它:
$this->request->data['parts']['_ids'][]=....
剩下的按照手册做:
$order = $this->Orders->newEntity();
$this->Orders->patchEntity($order, $this->request->data);
$this->Orders->save($order);
我无法修改传入数据以将其保存到 状态列
编辑:
"state" 字段仍为空值。
订单表
public function initialize(array $config)
{
parent::initialize($config);
$this->table('orders');
$this->displayField('id');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER',
]);
$this->belongsToMany('Parts', [
'foreignKey' => 'order_id',
'targetForeignKey' => 'part_id',
'joinTable' => 'orders_parts',
'through' => 'OrdersParts',
]);
$this->belongsToMany('Sets', [
'foreignKey' => 'order_id',
'targetForeignKey' => 'set_id',
'joinTable' => 'orders_sets',
]);
}
订单表
public function initialize(array $config)
{
parent::initialize($config);
$this->table('parts');
$this->displayField('name');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
$this->belongsTo('Orders', [
'foreignKey' => 'order_id',
'joinType' => 'INNER',
]);
$this->belongsToMany('Orders', [
'foreignKey' => 'part_id',
'targetForeignKey' => 'order_id',
'joinTable' => 'orders_parts',
]);
$this->belongsToMany('States', [
'foreignKey' => 'part_id',
'targetForeignKey' => 'state_id',
'joinTable' => 'parts_states'
]);
}
插入:
$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']]
);
我必须将 aslo SetsModel 包含到关联中。
$this->request->data['parts']['_ids'] 允许您加入 tables 但您不能通过这种方式添加数据。 为此,您的 $this->request->data['parts'] 结构必须如下所示:
'parts' => [
0 => [
'id'=> 1,
'_joinData' => [
'state' => 'exampleSate'
]
]
]
确保您的 'parts' 数组中不再有 '_ids' 数组,否则您将无法将数据保存到您的联接 table。
'id' 字段对应相关 Part 的 id。设置它:
$this->request->data['parts'][0]['id'] = <idOfTheConcernedPart>;
要设置您的 'state' 字段,只需执行:
$this->request->data['parts'][0]['_joinData']['state'] = "whatever";
最后,您需要通过向 patchEntity 和保存方法添加一些配置来告诉 cakephp 您正在保存一些 _joinData :
$this->Orders->patchEntity(
$order,
$this->request->data,
['associated' => ['Parts._joinData']]
);
$this->Orders->save(
$order,
['associated' => ['Parts._joinData']]
);
希望对您有所帮助,
干杯。