我是CakePHP的新手,并且一直在使用CakePHP cookbook和stackoverflow来尝试解决我的问题,但却无法解决。这可能是愚蠢的事。
我有引号,项目和joindata QuotesItems的连接表。
我在edit.ctp(模板引号)中有这个:
<div class="quotes form large-9 medium-8 columns content">
<?= $this->Form->create($quote) ?>
<fieldset>
<legend><?= __('Edit Quote') ?></legend>
<?php
echo $this->Form->input('customer_id', ['options' => $customers]);
echo $this->Form->input('items._ids', ['options' => $items]);
$counter = 0;
foreach($quote['items'] as $item):
echo $this->Form->input( "items.$counter.description", array( 'disabled' => 'disabled' ) );
echo $this->Form->input("items.$counter._joinData.item_quantity");
$counter++;
endforeach
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
</div>
在QuotesController中我有编辑功能:
public function edit($id = null)
{
$quote = $this->Quotes->get($id, [
'contain' => ['Items']
]);
if ($this->request->is(['patch', 'post', 'put'])) {
$quote = $this->Quotes->patchEntity($quote, $this->request->data, ['Quotes._joinData']);
//$quote = $this->Quotes->patchEntity($quote, $this->request->data, ['associated'=>['QuotesItems'=>['associated'=>['Items']]]] );
if ($this->Quotes->save($quote)) {
debug($this->request->data);
$this->Flash->success(__('The quote has been saved.'));
//return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The quote could not be saved. Please, try again.'));
}
}
$customers = $this->Quotes->Customers->find('list', ['limit' => 200]);
$items = $this->Quotes->Items->find('list', ['limit' => 200]);
$this->set(compact('quote', 'customers', 'items'));
$this->set('_serialize', ['quote']);
}
保存表单时发送的数组是:
[
'customer_id' => '1',
'items' => [
'_ids' => [
(int) 0 => '1'
],
(int) 0 => [
'_joinData' => [
'item_quantity' => '18'
]
]
]
]
我已经检查了食谱的保存“保存数据”,但它没有弄清楚我做错了什么。
数据是否需要报价的ID?我正在迭代这些项目的方式是正确的吗?
表关联如下: 引号:
$this->belongsToMany('Items', [
'through' => 'QuotesItems'
]);
产品:
$this->belongsToMany('Quotes', [
'through' => 'QuotesItems'
]);
QuotesItems(jointable):
$this->belongsTo('Quotes', [
'foreignKey' => 'quote_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Items', [
'foreignKey' => 'item_id',
'joinType' => 'INNER'
]);
提前致谢!
答案 0 :(得分:0)
尝试制作类似这样的数组格式:
[
'customer_id' => '1',
'items' => [
'id' => 1, // this is primary key of items table
'item_quantity' => '18' // this is another field of items table
]
]
在编辑方法中使用注释行:
$quote = $this->Quotes->patchEntity($quote, $this->request->data, ['associated'=>['QuotesItems'=>['associated'=>['Items']]]] );