1

category_id を 0 に設定し、カテゴリ ID は自動インクリメントです。したがって、cakephp でこのレコードを更新すると、cakephp はこのレコードを更新する代わりにこのレコードを挿入します。

$this->Category->id=$id;
$this->Category->save($this->data);

助けてください...

4

3 に答える 3

2

0 の ID は無効です

CakePHP には、すべての識別子が真であるという暗黙の前提があります。

/**
 * Returns the current record's ID
 *
 * @param integer $list Index on which the composed ID is located
 * @return mixed The ID of the current record, false if no ID
 */
public function getID($list = 0) {
    if (empty($this->id) || ...) {
        return false;
    }
    ...

そのため、0 の ID で保存しようとしても機能せず、偽の ID を持つ行が存在する場合でも、Cake は挿入を試みます。

于 2013-11-07T11:53:37.480 に答える
1

id が 0 より大きい場合、Cakephp はレコードを更新し、それ以外の場合は新しいレコードを挿入します。そのため、id 0 を 0 より大きい値に変更してみてください。これを試してください。

于 2013-12-21T09:06:39.830 に答える
1

私があなたを正しく理解しているかどうかはわかりませんが、すべてのレコードを WHERE category_id=0 で更新したい場合は、次のコードが効率的です:

$this->Category->updateAll(
    $this->data,
    array('Category.category_id' => 0)
);
于 2013-11-07T15:19:43.813 に答える