2015-05-13 7 views
8

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

+0

Czy to SQL związanych pytanie lub kod PHP (CakePHP) pytanie? –

+0

Mówię o cakephp 3 –

+0

@YasenZhelev to pytanie pochodzi z 2010 roku. Prawdopodobnie cakephp 2 lub nawet 1 –

Odpowiedz

10

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).

+0

'if ($ user-> save ($ user))' ten wiersz powinien zastąpić 'if ($ users-> save ($ user)) ' – Poonam

+0

Och, widzę. Masz rację. –

+0

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

7

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

+3

W tej metodzie, w jaki sposób potwierdzasz, że został on zaktualizowany i przekierowuje do niezbędnych lokalizacji? – artSir

+1

callbacks nie są uruchamiane podczas tego, więc jeśli ich potrzebujesz, to nie zadziała – dav

-4

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)); 
} 
0

Jeśli nie chcą callbacks być wyzwalany, wystarczy użyć updateAll()

$table->updateAll(['field' => $newValue], ['id' => $entityId]);