В какой-то части моего приложения мне нужно обновить только поле is_active
из некоторой table
с большим количеством полей. Каков наилучший подход к обновлению только этого поля и избегать валидаций и требований всех других полей?
И если вы хотите обновить только определенную строку, используйте это:
$users= TableRegistry::get('Users'); $user = $users->get($id); // Return article with id = $id (primary_key of row which need to get updated) $user->is_active = true; // $user->email= abc@gmail.com; // other fields if necessary if($users->save($user)){ // saved } else { // something went wrong }
См. Здесь ( Обновление данных в CakePHP3 ).
Это будет работать:
$users = TableRegistry::get('Users'); $query = $users->query(); $query->update() ->set(['is_active' => true]) ->where(['id' => $id]) ->execute();
http://book.cakephp.org/3.0/en/orm/query-builder.html#updating-data
Используя пример здесь: http://book.cakephp.org/3.0/en/orm/database-basics.html#running-update-statements . Выполните приведенный ниже код, чтобы обновить все записи таблицы table_name_here
с новым значением для столбца is_active
.
use Cake\Datasource\ConnectionManager; $connection = ConnectionManager::get('default'); $connection->update('table_name_here', ['is_active' => 'new_value_here']);
Если вы не хотите, чтобы вызывающие вызовы вызывались, просто используйте updateAll ()
$table->updateAll(['field' => $newValue], ['id' => $entityId]);
Другие ответы не используют интернационализацию и другие модели реквизита, обратные вызовы и т. Д. Я думаю, что это из-за построителя запросов, он не использует модели и поэтому их поведение, поэтому вы должны использовать:
$this->loadModel('Inputs'); $input = $this->Inputs->find()->where(['`key`' => $this->request->data['id']])->first(); $this->Inputs->patchEntity($input, ['prop' => $this->request->data['prop']]); if ($this->Inputs->save($input)) { die(json_encode(true)); } else { die(json_encode(false)); }