1

配列を構築し、ループ内のいくつかのフィールドを更新しようとしています。

これは私のリクエストです->データ

Array

(
    [list] => Array
        (
            [4] => null
            [2] => null
            [3] => null
            [5] => 3
        )

)

これは、jquery のシリアル化されたリストからの戻り値です。キーは行 ID であり、値は行のparent_id です。

したがって、コントローラーの配列をループします。

foreach ($this->request->data['list'] as $key => $value) {
    (!isset($orders[$value])) ? $orders[$value]=0 : $orders[$value]++;
    $data = array('id' => $key, 'parent_id' => (int)$value, 'display_order' => $orders[$value]);
    $this->Category->save($data);
}

ループで作成した $data 配列は正しいですが、SQL ログには各行の SELECT COUNT(*) などしか表示されず、UPDATE コマンドは表示されません。

これを保存するためにあらゆる方法を試しました: set() メソッドを使用し、$this->Category->id = $key; を使用します。データ配列にキーを直接追加する代わりに。

これが保存されない理由はありますか?確かにシンプルなもので…

4

3 に答える 3

4

save メソッドのケーキの規則を忘れたと思います。すべてのフィールド値を、モデル名 FirstCap の配列内に配置する必要があります。次のようなものです。

Array
(
    [ModelName] => Array
        (
            [fieldname1] => 'value'
            [fieldname2] => 'value'
        )
)

それ以外の場合は、すべての値に set を使用できます。また、作成する挿入ごとに 1 つの行を作成するのを忘れているので、次のようなことを試してください。

foreach ($this->request->data['list'] as $key => $value) {
     (!isset($orders[$value])) ? $orders[$value]=0 : $orders[$value]++;
     $data = array( 'Category' => array('id' => $key, 'parent_id' => (int)$value, 'display_order' => $orders[$value]));
     $this->Category->save($data);
}

また、すべてのIDを設定して、値を反復処理することもできます

foreach ($this->request->data['list'] as $key => $value) {
     (!isset($orders[$value])) ? $orders[$value]=0 : $orders[$value]++;
    $this->Category->id = $key;
    $this->Category->set(array('parent_id' => (int)$value,
                               'display_order' => $orders[$value]
    ));

     $this->Category->save();
}

すべての答えを試してみてください。ただし、最後の答えの方が問題により適していると思います。

于 2012-11-14T19:36:47.217 に答える
1

CakePHP のから。

ループで save を呼び出すときは、create() を呼び出すことを忘れないでください。

于 2012-11-14T16:26:19.810 に答える
0

$data をエコーし​​、save() メソッドの構文と一致させます。また、テーブル内のフィールドのデータ型を一致させるためにスリップしません。

于 2012-11-19T16:28:52.293 に答える