选择并显示Codeigniter中的所有行

时间:2018-02-19 18:33:23

标签: php codeigniter activerecord codeigniter-3

我是Codeigniter框架的新手,我想问一下是不是很好,或者它存在另一种方法来显示视图页面中数据库的所有行。

我有这个控制器:

    class Dashboard extends CI_Controller{

            public function index()
    {

$data['user'] = $this->dashboard_model->get_user_details($this->session->userdata('logged_in'));  

            $this->load->view('includes/header', $data);

模型仪表板:

class Dashboard_model extends CI_Model{

    public function get_user_details($user_id){

        $this->db->select("*");
        $this->db->where('id', $user_id);
        $result = $this->db->get('users');
        return $result->result_array ();
    }
}

我在视图页面中显示如下:

<?php echo $user[0]['id']; ?> <?php echo $user[0]['username']; ?>

代码正在运行,它告诉我我想要什么,但我不知道这是否是一个很好的解决方案。

5 个答案:

答案 0 :(得分:1)

如果只返回单行,您也可以使用return $result->row_array ();

然后在您的视图文件中使用:$user['id'];

获取数据

适用于多行:

您的解决方案很好,但您需要添加foreach循环并获取数据

例如:

foreach($user as $usr) {
  echo $usr['id']; echo  "<br/>";
  echo $usr['username'];
}

答案 1 :(得分:1)

通过应用$this->db->where('id', $user_id);,您只能为$user_id(并非所有用户)的用户获得结果(1),并且(2)只有具有该ID的用户才能获得结果数据库。获取所有用户的正确方法,同时稍微修改您的功能以支持仅返回一个用户,如下所示:

/**
 * @param int $user_id When NULL will return all users
 * @return array
 */
public function get_user_details($user_id = null) {
    $this->db->from('users');
    if (!is_null($user_id)) {
        $this->db->where('id', $user_id);
        $q = $this->db->get();
        if ($q->num_rows() !== 1) {
            return array();
        }
        return $q->row_array();
    } else {
        return $this->db->get()->result_array();
    }
}

为了吸引所有用户:$this->dashboard_model->get_user_details()

要登录用户:$this->dashboard_model->get_user_details($this->session->userdata('logged_in'))

要获取ID为123的用户:$this->dashboard_model->get_user_details('123')

$user_id为空时,您可以查看以下结果:

if (count($users) !== 0) {
    foreach ($users as $user) {
        echo $user['id'];
        echo $user['username'];
    }
} else {
    echo 'No users';
}

设置$user_id后,您会得到一个结果,这样就可以了:

if (count($users) !== 0) {
    echo $users['id'];
    echo $users['username'];
} else {
    echo 'User with that id does not exist!';
}

答案 2 :(得分:0)

更新回答: 根据通讯中提供的详细信息

而不是return $result->result_array();使用return $result->row_array();

查看:

<?php echo $user['id']; ?>
<?php echo $user['username']; ?>

用于获取多行:

return $result->result_array();将为您提供用户表中所有用户的数组。

您需要做的是,使用foreach循环在视图页面中访问这些用户。

<?php   
foreach ($user as $row) {
    echo $row['id'];
    echo $row['username']; 
}
?>

答案 3 :(得分:0)

对于单个用户信息,我将使用row_array()或row()

https://www.codeigniter.com/userguide3/database/queries.html

<?php

class Dashboard_model extends CI_Model{

    public function get_user_details($user_id){

        $this->db->where('id', $user_id);
        $result = $this->db->get('users');
        return $result->row_array();
    }
}

控制器

<?php

class Dashboard extends CI_Controller {

    public function index()
    {

        $this->load->model('dashboard_model');

        // Use the users id stored in your session when logged in 
        $userinfo = $this->dashboard_model->get_user_details($this->session->userdata('id'));  

        $data['id'] = $userinfo['id']; 

        $data['username'] = $userinfo['username']; 

        $this->load->view('includes/header', $data);

        }

}

然后在视图上回显

<?php echo $username;?> example <?php echo $id;?>

答案 4 :(得分:0)

在你的模特中

class Dashboard_model extends CI_Model{
public function get_user_details($user_id){

return this->db->get_where('users', array('id' => $user_id))->result_array(); //You can use result_array() for more than one row and row_array() only for one row
//If you want to show all rows form database use this return $this->db->get('users')->result(); OR result_array()
}

}

在您的视图中

对于多行使用foreach循环

foreach($user as $usr){
echo $usr['']; //Add all your database data here like this
}