/** * изменяет данные полей, указанных в $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)); }