当模型在MVC中找不到DB中的记录时,何处传回消息?

时间:2013-04-28 01:34:55

标签: php codeigniter

我想知道将成功或失败消息从模型传递回控制器的最佳消息是什么?成功消息很简单,因为我们可以传回数据。但是,对于失败,我们只能传递FALSE而不是失败的回调结果。

最好的方法是什么?

以下是方法一:

以下是模型:

function get_pkg_length_by_id($data) {
    $this->db->where('id', $data['pkg_length_id']);
    $result = $this->db->get('pkg_lengths');
    if($result->num_rows() > 0 ) {
        return $result->row();
    }
    else {
        return false;
    }
}

在控制器中,我会做

function show() {
    if(get_pkg_length_by_id($data) { 
        //pass success message to view
    }
    else {
        //Pass failure message to view
    }

这是版本2:

在模型中

function get_pkg_length_by_id($data) {
    $this->db->where('id', $data['pkg_length_id']);
    $result = $this->db->get('pkg_lengths');
    if($result->num_rows() > 0 ) {
        $result['status'] = array(
            'status' => '1',
            'status_msg' => 'Record found'
        );
        return $result->row();
    }
    else {
        $result['status'] = array(
            'status' => '0',
            'status_msg' => 'cannot find any record.'
        );
        return $result->row();
    }
}

在控制器

function show() {
$result = get_pkg_length_by_id($data);
    if($result['status['status']] == 1) { 
        //pass $result['status'['status_msg']] to view
    }
    else {
        //pass $result['status'['status_msg']] to view
    }

2 个答案:

答案 0 :(得分:2)

我不能肯定地说哪个是最好的。我可以说我经常使用选项#2,我从服务器传递错误,通常以特定的形式这样做,我的控制器的任何子类都可以解析并发送到视图。

另外,在你的show()函数中,else是无关紧要的,一旦你返回,你就会突破这个函数,所以你可以这样做:

if($result->num_rows() > 0 ) {
    $result['status'] = array(
        'status' => '1',
        'status_msg' => 'Record found'
    );
   //the condition is met, this will break out of the function
    return $result->row();
}
$result['status'] = array(
  'status' => '0',
   'status_msg' => 'cannot find any record.'
);
return $result->row();

答案 1 :(得分:2)

在模型页面中做这些东西总是很好的做法。

我对你所做的事情做了一些改动如下:

function get_pkg_length_by_id($data) 
{
    $this->db->where('id', $data['pkg_length_id']);
    $query = $this->db->get('pkg_lengths');
    /*
        Just changed var name from $result to $query
        since we have a $result var name as return var
    */
    if($result->num_rows() > 0 ) {
        $result = $query->row_array();
        /*
            $result holds the result array.
        */
        $result['status'] = array(
            'status' => '1',
            'status_msg' => 'Record found'
        );
        //return $result->row();
        /*
          This will return $result->row() only which 
          doesn't include your $result['status']
        */
    }
    else {
        $result['status'] = array(
            'status' => '0',
            'status_msg' => 'cannot find any record.'
        );
        //return $result->row();
        /*
        This is not required.
        Returning just status message is enough.
        */
    }
    return $result;
}