Esempio n. 1
0
 /**
  * изменяет данные полей, указанных в $data пользователей по ID.
  */
 public function updateUser($id, array $data)
 {
     $mustBeUnic = $this->dbStruct['unic'];
     $cantBeChange = $this->dbStruct['nochange'];
     if (count($cantBeChange)) {
         foreach ($cantBeChange as $column) {
             if (array_key_exists($column, $data)) {
                 throw new Exception("[" . __CLASS__ . "] Нельзя изменить поле " . $column . "!");
             }
         }
     }
     // проверяем уникальность данных, если задано
     if (count($mustBeUnic)) {
         $filter = array();
         foreach ($mustBeUnic as $column) {
             if (array_key_exists($column, $data) && mb_strlen($data[$column])) {
                 // существует и не пустой (пустое поле мб не уникальным)
                 $filter[$column] = $data[$column];
             }
         }
         // проверяем наличие пользователя, у которого есть такие данные, кроме собственно изменяемой записи
         if (count($filter)) {
             $searchedUsers = $this->selectUsers($filter, true)->toArray();
             if (count($searchedUsers) > 1) {
                 throw new Exception("[" . __CLASS__ . "] Пользователь с такими данными уже существует - в базе есть несколько пользователей с не уникальными данными!");
             }
             if (count($searchedUsers) && $searchedUsers[0][$this->dbStruct['id']] !== $id) {
                 throw new Exception("[" . __CLASS__ . "] Пользователь с такими данными уже существует!");
             }
         }
     }
     $sql = new RequestBuilder($this->dbInctance);
     $sql->update('^table', array('^table' => $this->dbStruct['table']))->set($data)->where('^id = :val', array('^id' => $this->dbStruct['id'], ':val' => $id))->query();
     return new UpdateUser(array('result' => true));
 }