Обновление с использованием Active Record в CodeIgniter - PullRequest
1 голос
/ 02 октября 2011

У меня странная проблема, может быть, я просто не понимаю, как Active Record работает достаточно хорошо, но вот она. Я пытаюсь обновить запись с определенным идентификатором. Для простоты и тестирования я просто предоставляю идентификатор вместо переменной.

Теперь, если я правильно понял Active Record, похоже, что он работает совсем не так, как я привык в Asp.Net, где я использовал Entity Framework ORM. Но насколько я понял, вы можете сначала выбрать запись в одной строке, а затем, когда вы запустите update в следующей строке, эта конкретная запись будет обновлена. По крайней мере, так это выглядит в документации. Вот пример из документов:

$data = array(
               'title' => $title,
               'name' => $name,
               'date' => $date
            );

$this->db->where('id', $id);
$this->db->update('mytable', $data); 

Итак, я попытался сделать то же самое в моем коде:

        $updateData = array(
           'description' => 'My localhost'
        );

        $this->myDb->where('id', 2832);
        $this->db->update('Users', $updateData);

Ну, это не сработало, как ожидалось! Он действительно обновил базу данных, но обновил каждую запись, так что для всех записей поле описания обновилось до «Мой локальный хост»! Хорошо, что я все еще использую тестовую базу данных ...

Я видел в документах, что был и альтернативный путь, указав идентификатор в операторе обновления:

$this->db->update('Users', $updateData, array('id' => 2832));

Это сработало нормально, так здорово. Но ... я все еще хочу знать, почему первая альтернатива не сработала, потому что, если я не понимаю этого, я могу совершить другие разрушительные ошибки в базе данных ...

Буду очень признателен за разъяснения о том, как это работает, и почему все записи обновляются.

1 Ответ

4 голосов
/ 02 октября 2011
$updateData = array(
    'description' => 'My localhost'
);

$this->myDb->where('id', 2832);
$this->db->update('Users', $updateData);

Это не работает, потому что вы применяете условие where к $this->myDb и затем вызываете update для $this->db. Поскольку нет никаких ограничений на $this->db, все записи обновляются.

Измените его на:

$this->db->where('id', 2832);
$this->db->update('Users', $updateData);
...