我在我的新CakePHP网站上建立了一个发票系统,我目前正在尝试构建一个功能,让我将重新编辑的信息保存回相同的记录中。
以下是我正在处理的代码部分,
$InvoiceDataVar = $this->data['Invoicedata'];
foreach ($InvoiceDataVar as $DataKey => $DataValue) {
$UpdateWork = $InvoiceDataVar[$DataKey]['workdes'];
debug($UpdateWork);
$this->Invoicedata->updateAll(
array('Invoicedata.workdes' => "'$UpdateWork'"),
array('Invoicedata.invoicejoblists_id' => $InvoiceID)
);
}
这是工作$ this->数据成立,
'Invoicedata' => array(
(int) 0 => array(
'workdes' => 'test new update 1',
'price' => '500.00'
),
(int) 1 => array(
'workdes' => 'test new update 2',
'price' => '501.00'
),
(int) 2 => array(
'workdes' => 'test new update 3',
'price' => '503.00'
),
(int) 3 => array(
'workdes' => 'test new update 4',
'price' => '504.00'
),
(int) 4 => array(
'workdes' => 'test new update 5',
'price' => '505.00'
),
(int) 5 => array(
'workdes' => 'test new update 6',
'price' => '999.99'
)
)
这些当然只是测试数据,但除非我不理解我已多次使用的UpdateAll函数文档,否则所有这一切都将使用最后一个测试输入更新所有六个字段。现在,工作区的所有字段都包含“测试新的更新6”。
我还应该说,可能并不是所有方式都是六个字段,总会有至少一个字段,最多(此时)有6个输入要更新。
我正在考虑加载'invoicedata表的ID,这是一个自动计数号,其中joblist_id在所有正在更新的字段中都是相同的id?这是我目前的思路......
欢迎任何帮助。
格伦。
答案 0 :(得分:2)
您似乎正在使用CakePHP 1.3
要一次更新许多记录,文档中会显示一种快捷方式
首先,您需要在发布数据中包含Invoicedata模型的ID
'Invoicedata' => array(
(int) 0 => array(
'id' => 23, // include id of the record
'workdes' => 'test new update 1',
'price' => '500.00'
),
// other records
)
// then call save all function
$this->Invoicedata->saveAll($this->data['Invoicedata']);
答案 1 :(得分:0)
请检查:updateAll documentation您可以看到,第一个参数是$fields
,您想要更新哪些字段及其相应的值,第二个参数是$conditions
一些定义的限制将被更改的行的范围。您有空$conditions
,因此,所有行都将更新。最后的值(这里你需要检查DataSource更新方法的源代码),但认为它产生了一些想法
UPDATE invoicedatas SET workdes = value1, price = value2, workdes = value3, price = value4 and etc
所以将使用最后的值。
您的数据数组应包含id
属性,以更新正确的记录,为此您应使用Invoicedata模型的save
或saveAll
方法。