简体   繁体   中英

Fetch data from database in codeigniter

I have 2 cases where i am fetching the entire data and total number of rows of a same table in codeigniter, I wish to know that is there a way through which i can fetch total number of rows, entire data and 3 latest inserted records from the same table through one code

Controller code for both cases is as given below (although i am applying it for each case seperately with different parameters)

public function dashboard()
    {
        $data['instant_req'] = $this->admin_model->getreq();
        $this->load->view('admin/dashboard',$data);
    }

1) to fetch the entire data from a table in codeigniter

Model Code

public function getreq()
    {
        $this->db->where('status','pending');
        $query=$this->db->get('instanthire');
        return $query->result();
    }

View Code

foreach ($instant_req as $perreq) 
    {
        echo $perreq->fullname;
        echo "<br>";
    }

2) to fetch number of rows from a table in codeigniter

public function getreq()
    {
        $this->db->where('status','pending');
        $query=$this->db->get('instanthire');
        return $query->num_rows();
    }

View Code

echo $instant_req;

You can make only one function that gives you the all data at once total number of rows, entire data and 3 latest inserted records

for example in the model

public function getreq()
{
    $this->db->where('status','pending');
    $query=$this->db->get('instanthire');
    $result=$query->result();
    $num_rows=$query->num_rows();
    $last_three_record=array_slice($result,-3,3,true);
    return array("all_data"=>$result,"num_rows"=>$num_rows,"last_three"=>$last_three_record);
}

in controller dashboard function

public function dashboard()
{
    $result = $this->admin_model->getreq();
    $this->load->view('admin/dashboard',$result);
}

in view

foreach ($all_data as $perreq) 
{
    echo $perreq->fullname;
    echo "<br>";
}
//latest three record
foreach ($last_three as $perreq) 
{
    echo $perreq->fullname;
    echo "<br>";
}
//total count
echo $num_rows;

Raw query may work here.

$resultSet =  $this->db->query("select * from table_name"); 
$queryCount = count($resultSet );

Function

function getData($limit = 0){

    //Create empty array
    $data = [];

    //Where clause
    $this->db->where('status','pending');

    //Order Data based on latest ID
    $this->db->order_by('id', 'DESC');
    if($limit != 0){
        $this->db->limit($limit);
    }

    //Get the Data
    $query = $this->db->get('instanthire');
    $data['count'] = $query->num_rows();
    $data['result'] = $query->result();
    return $data;

}

Calls

//Last 3 Inserted
$data = getData(3);
//All Data
$data = getData();

CodeIgniter Database Documentation

Try this logic :

Model code :

public function getreq()
{
    $this->db->where('status','pending');
    $this->db->order_by('id', 'DESC');  //actual field name of id
    $query=$this->db->get('instanthire');

    return $query->result();
}

Controller Code :

public function dashboard()
{
    $data['instant_req']  = $this->admin_model->getreq();
    $data['total_record'] = count($data['instant_req']);
    $this->load->view('admin/dashboard',$data);

}

View Code:

 $i=0;
foreach ($instant_req as $perreq) 
{
    if($i<3){
         echo $perreq->fullname;
         echo "<br>";
    }
    $i++;
}
Echo 'Total record : '.$total_record;

Here is a simple solution that I can first think of but if you want me to maybe improve I can.

Just stick with your first code(Model) and in the view count how many items are iterated through.

$count = 0;
foreach ($instant_req as $perreq) 
{
    echo $perreq->fullname;
    echo "<br>";
    $count++;
}
echo $count;

Am I still missing something? just let me know

EDIT:

This is another solution, return an array

public function getreq()
{
    $this->db->where('status','pending');
    $query=$this->db->get('instanthire');
    $data['results'] = $query->result();
    $data['count'] = $query->num_rows();

    return $data
}

I'm not very confident and haven't really tried this but on top of my head I think it can work.

Model:

public function getreq()
{
     $res = $this->db->order_by("<place column primary id>","desc")->get_where('instanthire',['status'=> 'pending']);
     $latest_3 = [];
     if(count($res)){
        $i=1;
        foreach($res as $r){
            $latest_3[]=$r;
            if($i == 3)
               break;
            $i++;
        }
     }

     $arr = [
        'latest_3' => $latest_3,
        'count' => count($res),
        'total_result' => $res,
     ];
     return $arr;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM