В част от приложението ми трябва да актуализирам само полето is_active
на някои table
с много полета. Какъв е най-добрият подход за актуализиране само на това поле и избягване на валидациите и изискванията на всички други полета?
Актуализирайте само едно поле на Cakephp 3
Отговори (5)
И ако искате да актуализирате само определен ред, използвайте това:
$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= [email protected]; // other fields if necessary
if($users->save($user)){
// saved
} else {
// something went wrong
}
Вижте тук (Актуализиране на данни в CakePHP3).
if($user->save($user))
този ред трябва да се замени с if($users->save($user))
- person Poonam; 22.12.2016
$users->save($user, ['associated' => false])
, само за да съм сигурен
- person aexl; 31.05.2019
Това ще работи:
$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));
}