W niektórych częściach mojej aplikacji muszę zaktualizować tylko pole is_active
dla niektórych table
z dużą ilością pól. Jakie jest najlepsze podejście do aktualizacji tylko tego pola i uniknięcia walidacji i wymagań wszystkich innych pól?Zaktualizuj tylko jedno pole na Cakephp 3
Odpowiedz
A jeśli chcesz zaktualizować tylko konkretnego wiersza, użyj tego:
$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
}
Zobacz tutaj (Updating data in CakePHP3).
'if ($ user-> save ($ user))' ten wiersz powinien zastąpić 'if ($ users-> save ($ user)) ' – Poonam
Och, widzę. Masz rację. –
Ciasto 3 ma zabrudzoną funkcję. Więc dopóki nie zmodyfikujesz innych pól, nie zostaną one zaktualizowane lub wysłane w zapytaniu. To powstrzymuje Cię od przypadkowego nadpisania kolumn hasła. Jednak hasła i podobne pola powinny i tak być ustawione na false. – styks
Na tym przykładzie: http://book.cakephp.org/3.0/en/orm/database-basics.html#running-update-statements. Uruchom poniższy kod, aby zaktualizować wszystkie rekordy w tabeli table_name_here
o nową wartość dla kolumny is_active
.
use Cake\Datasource\ConnectionManager;
$connection = ConnectionManager::get('default');
$connection->update('table_name_here', ['is_active' => 'new_value_here']);
to będzie działać:
$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
innych odpowiedzi nie korzystają internacjonalizacji i innych modeli rekwizyty, wywołania zwrotne itd myślę, że to z powodu konstruktora zapytań , nie używa modeli, a więc ich zachowań, dlatego powinieneś użyć:
$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));
}
Jeśli nie chcą callbacks być wyzwalany, wystarczy użyć updateAll()
$table->updateAll(['field' => $newValue], ['id' => $entityId]);
Czy to SQL związanych pytanie lub kod PHP (CakePHP) pytanie? –
Mówię o cakephp 3 –
@YasenZhelev to pytanie pochodzi z 2010 roku. Prawdopodobnie cakephp 2 lub nawet 1 –