Результаты класса построителя запросов Codeigniter - PullRequest
0 голосов
/ 04 марта 2019

Безопасно ли предполагать, что в классе построителя запросов codeigniter для каждого успешного запроса он будет автоматически возвращать true и false в случае сбоя?

Если это так, относится ли это к CRUD?или это правда только при вставке и удалении данных?Для обновления я должен был бы проверить затронутые строки?или он также вернет истинный результат, если обновление прошло успешно?

Например:

контроллер:

$data = array('username' => $this->input->post('username'),
    'password' => password_hash($this->input->post('password'), PASSWORD_BCRYPT),
    'date_created' => mdate('%Y-%m-%d', time())
);

$result = $this->account_model->create($data);

if($result == TRUE){
    $this->session->set_flashdata('message', 'Registration Successful');
    redirect('pages/login');
}else{
    $this->session->set_flashdata('message', 'Registration Failed');
    redirect('pages/register');
}

модель:

public function create($new_user){
    $insert = array('username' => $new_user['username'],
        'password' => $new_user['password'], 
        'date_created' => $new_user['date_created']
    );

    $result = $this->db->insert('user', $insert);

    return $result;

}

Кроме того, это плохо, если я вернул сам запрос?вроде

return $this->db->insert('user', $insert);

1 Ответ

0 голосов
/ 04 марта 2019

Нет.На самом деле, нет.Однако вы можете контролировать, что возвращает модель.Имейте в виду, что, например, пустой набор результатов не обязательно является «неудачным» запросом.Есть много случаев, когда пустой набор результатов может быть полезен.

После фактического выполнения запроса вы получите объект с результатом

, например, при выборе вы можете сделать$result = $this->db->get() и ваша переменная $result станет объектом с большим количеством информации, к которой вы можете получить доступ:

Количество возвращаемых строк: $result->num_rows(); Возвращаемое содержимое: $result->result(); Определенные строки: $result->row(0); Определенное полев определенной строке: $result->row(3)->field_name;

При вставке или обновлении становится доступным $this->db->affected_rows(), чтобы вы могли проверить, сколько строк было обновлено или вставлено.Вставки также делают $this->db->insert_id() доступным в случае, если вам нужно значение первичного ключа таблицы для вставленной строки.

Таким образом, вы управляете логикой.

при выборе я обычно делаю:

$query = $this->db->get();
if ($query->num_rows() == 0)
{
  return false;
}

else
{
  return $query->row(0);
}

Затем я проверяю в контроллере, вернула ли модель ложный или реальный набор результатов (иногда я просто возвращаю true вместо фактического набора результатов, если я просто проверяю, существует ли что-либо)).Вы можете адаптировать результаты к вашим потребностям.

При вставке я обычно проверяю:

if ($this->db->affected_rows() != 0)
{
  return $this->db->insert_id();
}

else
{
  return false;
}

(в контроллере возвращаемое false будет обрабатываться как «ошибка вставки»").

Чтобы ответить на ваш вопрос более глобально: Нет, по умолчанию ничего не происходит, но Codeigniter дает вам все необходимое, чтобы адаптировать поведение вашего сайта к вашим конкретным потребностям и вкусам

...