Intereting Posts

Обновите только одно поле на Cakephp 3

В какой-то части моего приложения мне нужно обновить только поле 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)); }