user2223224
user2223224

Reputation: 107

Where to pass back message when Model cannot find a record in DB in MVC?

I'm wondering what is the best message to pass back the success or failure message from the model to the controller? The success message is easy because we can pass the data back. However, for failures, we can only pass FALSE and not the callback result of the failure.

What is the best method?

Here is method one:

Here is the model:

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;
    }
}

In the controller, I will do

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

Here is version 2:

In Model

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();
    }
}

In Controller

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
    }

Upvotes: 2

Views: 102

Answers (2)

hsuk
hsuk

Reputation: 6860

Its always a good practice to do these kind of stuffs in model page.

I have made few changes on what you have done as follows:

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;
}

Upvotes: 2

TheMethod
TheMethod

Reputation: 3001

I can't say for certain which is best. I can say that I often use choice # 2, where I pass errors from the server, often doing so in a specific form that any subclass of my controller can parse and send to the view.

Also, in your show() function, the else is extraneous, once you return, you will break out of the function , so you can just do :

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();

Upvotes: 2

Related Questions