Где проверить результаты? - PullRequest
2 голосов
/ 31 марта 2011

У меня возникла эта дилемма в CodeIgniter, потому что это наиболее подверженный ошибкам способ проверки результатов. Давайте предположим, что у меня есть этот фрагмент кода:

    function getByUsername($username){
    $this->db->where('username',$username);
    $query=$this->db->get('user');

    if($query->num_rows() == 1)
    {
    return $query;
    }
}

Ну, вы можете проверить здесь 'num_rows ()', или вы можете проверить это в вашем контроллере или представлении. Для меня лучшее место, чтобы проверить это, очевидно, в модель . Но если вы сделаете это, вы должны проверить это где-нибудь еще раз, если оно даже содержит что-либо.

Я вроде PHP n00b, поэтому, пожалуйста, помогите мне, я, вероятно, упускаю самое простое решение, которое есть, но я не вижу его.

Ответы [ 2 ]

4 голосов
/ 31 марта 2011

однозначного ответа никогда не бывает, поскольку MVC - это всего лишь концепция, и на практике оба будут работать нормально.

Однако, как правило, это лучше всего сделать в модели.Вы можете вернуть результат в случае успеха или вернуть false в случае ошибки.

Ваш контроллер может справиться с логикой ~

if($success) {
    // do something
} else {
    // do something else
}

Вы можете получить кучу мнений по этому поводу, и ни одно из них не будет правильным или неправильным.

edit

в вашем примере:

if($query->num_rows() == 1)
{
   return $query;
}

return false;

тогда ваш контроллер может быть:

$data = $this->my_model->getByUsername($foo);

if($data ==false)
{
   die('There are no results!');
}

// there's results..
print_r($data ->result());
3 голосов
/ 31 марта 2011

Предлагаю вам проверить количество строк в модели. Если он содержит ноль строк, вы должны вернуть FALSE, иначе вы должны вернуть массив из модели, а не результат запроса.

function getByUsername($username){
    $this->db->where('username',$username);
    $query = $this->db->get('user');

    if($query->num_rows() == 0){
        return FALSE;
    }
    return $query->result_array();
}

Затем в вашем контроллере вы просто видите, является ли результат ЛОЖЬ (или массив).

$user = $this->User_model->getByUsername('Joe');
if($user !== FALSE){
    // Valid user data
}
else{
    // No user data
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...