У меня проблема с обновлением таблицы базы данных в CakePHP …
Так что у меня есть страница профиля, где вошедший в систему пользователь может видеть и обновлять свою личную информацию. Вот мое решение для этого (да, я знаю, что это не самое лучшее …)
if($this->request->is('post')) {
$data = $this->request->data['user-profile'];
// $uid = $this->Session->read("WebUser.id");
$uid = 1;
$user_data = $this->WebUser->find('first', array('conditions'=>array('id'=>$uid)));
$updated_fields = '';
foreach($data as $key => $value) {
if($key != 'state'){
if(empty($value)) {
$this->Session->setFlash("Please fill in all the required fields");
return;
}
}
if($user_data['WebUser'][$key] != $value) {
if($key == 'email') {
$mail_check = $this->WebUser->find('first', array('conditions'=>array('email'=>$value, 'id !='=>$uid)));
if($mail_check) {
$this->Session->setFlash("This e-mail is already registered");
return;
}
}
$updated_fields .= "'".$key."'=>'".$value."',";
}
}
if($updated_fields != '') {
$updated_fields .= "'modified'=>'".date("Y-m-d H:i:s")."'";
$this->WebUser->read(null, $uid);
$this->WebUser->set(array('first_name'=>'John','modified'=>'2014-12-30 10:53:00'));
if($this->WebUser->save()) {
$this->printr($this->data);
$this->WebUser->save();
$this->Session->setFlash("Success : Profile data is now modified", array("class"=>"success_msg"));
} else {
$this->Session->setFlash("Error : Data modifying isn't complete. Please try again!");
}
}
return;
}
Таким образом, этот код получает информацию о пользователе из базы данных и ищет те поля, которые редактируются на странице профиля. Проблема в том, что когда я хочу сохранить данные, они возвращают мне ложь и не сохраняют их … У кого-то есть решение для этого?
Попробуйте положить
$ This-> WebUser-> validationErrors;
в другой части и проверьте, есть ли какие-либо ошибки проверки или нет.
Как это:
if($this->WebUser->save()) {
$this->printr($this->data);
$this->WebUser->save();
$this->Session->setFlash("Success : Profile data is now modified", array("class"=>"success_msg"));
} else {
echo "<pre>";print_r($this->WebUser->validationErrors);die();
$this->Session->setFlash("Error : Data modifying isn't complete. Please try agin!");
}
Вы пытались установить id
непосредственно?
$this->WebUser->id = $uid;
Также CakePHP автоматически обновляется modified
поле в вашей таблице после любых транзакций. Так что вам не нужно устанавливать его напрямую (но вы можете это сделать, если хотите использовать любое другое значение даты).
О проверке. Я рекомендую вам прочитать о Проверка данных в CakePHP, поскольку эта проверка не является хорошей, она может обрабатываться моделями.
Также. Вы можете получить любые ошибки проверки из моделей, использующих Model::$validationErrors
,
debug($this->Recipe->validationErrors);
Проблема с этим кодом заключалась в том, что я не хотел сохранять опубликованные данные (отладка ($ this-> WebUser-> save) вернула мне false). В конце я не нашел решения, почему этот код не работал, но пришел к выводу, что вам никогда не нужно использовать больше таблиц пользователей, чем одну. Итак, теперь у меня есть таблицы «Пользователи» и «Группы», и к их группам подключены пользователи разных типов (Admin, User, …).