我是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']; ?>
代码正在运行,它告诉我我想要什么,但我不知道这是否是一个很好的解决方案。
答案 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
}