0

新しい 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->data hold,

  '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 つのフィールドすべてを最後のテスト入力で更新するだけです。現在、workdes のすべてのフィールドに「test new update 6」が含まれています。

また、すべての方法で 6 つのフィールドがあるわけではなく、常に少なくとも 1 つのフィールドがあり、更新する入力は最大 (現時点では) 6 つです。

「invoicedata テーブルの ID をロードすることを考えていました。これは自動カウント番号ですが、joblist_id は更新されるすべてのフィールドで同じ ID です。これが私の現在の考え方です....

どんな助けでも大歓迎です。

グレン。

4

2 に答える 2

0

確認してください: updateすべてのドキュメントを見ることができます。最初のパラメーターは$fields、更新するフィールドとその適切な値であり、2 番目のパラメーターは $conditions、変更される行の範囲を定義するいくつかの制限です。が空な$conditionsので、すべての行が更新されます。Last values (ここでは DataSource update メソッドのソース コードを確認する必要があります) が、次のようないくつかの結果が生成されると思います

UPDATE invoicedatas SET workdes = value1, price = value2,  workdes = value3, price = value4 and etc 

そのため、最後の値が使用されます。

データ配列にはid、正しいレコードを更新するための属性が含まれている必要があります。これには、Invoicedata モデルのメソッドsaveまたはメソッドを使用する必要があります。saveAll

于 2013-07-17T07:21:49.357 に答える