CakePHP UpdateAll仅更新上次输入的数据

时间:2013-07-17 07:09:51

标签: cakephp

我在我的新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?这是我目前的思路......

欢迎任何帮助。

格伦。

2 个答案:

答案 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模型的savesaveAll方法。