У меня странная проблема, может быть, я просто не понимаю, как 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));
Это сработало нормально, так здорово. Но ... я все еще хочу знать, почему первая альтернатива не сработала, потому что, если я не понимаю этого, я могу совершить другие разрушительные ошибки в базе данных ...
Буду очень признателен за разъяснения о том, как это работает, и почему все записи обновляются.