Codeigniter 从 table1 中获取具有 table2 中 id 的名称列表
Codeigniter get list of names from table1 that have id from table2
我需要从 'users' table 中获取一份名称列表及其 ID,其中包含我正在显示的 'groupid' 个组。我正在使用 CodeIgniter
在我看来,我想通过以下方式完成 table:
| GroupID | Group Name | Users in Group |
-------------------------------------------------------------
| 10001 | Group1 | User1, User3, User5 |
| 10002 | Group2 | User2, User6 |
| 10003 | Group3 | User4 |
所以基本上 table 中的每个 groupid 条目我想在列 "Users in Group" 下有一个该组中的用户列表,逗号分隔。
"Users in Group" 列中的每个用户都是他们 "Edit User" 页面的 link,该页面具有 URL mysite.com/admin/edituser/USERID
我的控制器:
class Admin extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->database('admin');
$this->load->model('adminmodel','',TRUE);
}
public function groups() {
if ($this->session->userdata('loggedin')) {
$session_data = $this->session->userdata('loggedin');
$data['username'] = $session_data['username'];
$this->load->view('header', $data);
$this->load->view('sidebar');
$data['group_results'] = $this->adminmodel->list_groups();
foreach ($data['group_results'] as $group_results) {
$data['name_results'][$group_results['id']] = $this->adminmodel->list_users_in_group($group_results['id']);
}
$this->load->view('admin/groups', $data);
$this->load->view('footer-nocharts');
}
else {
//If no session, redirect to login page
redirect('user/login', 'refresh');
}
}
我的模特:
function list_groups() {
$this->db->select('id, name');
$this->db->from('groups')->order_by('id','asc');
$query = $this->db->get();
return $query->result();
}
function list_users_in_group($groupid) {
$this->db->select('users.name, users.id, groups.id');
$this->db->from('users')->order_by('users.name','asc');
$this->db->where('groups.id', $groupid);
$this->db->join('groups', 'groups.id = users.groupid');
$query = $this->db->get();
return $query;
}
和视图:
<table class="table table-striped table-bordered table-hover" id="dataTables-example">
<thead>
<tr>
<th style="width: 38px;">GroupID</th>
<th style="width: 150px;">Group Name</th>
<th style="width: 40px;">Users Assigned</th>
</tr>
</thead>
<tbody>
<?php foreach ($admin_results as $admin_entry): ?>
<tr class="odd gradeX">
<td><?php echo $admin_entry->id; ?></td>
<td><?php echo $admin_entry->name; ?></td>
<td>
<?php foreach ($name_results as $name): ?>
<?php echo "<a href='/admin/edituser/".$id."'>".$name."</a>, "; ?>
<?php endforeach; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
数据库非常简单,两个 table,每个两列。
用户 table 有列 'id'(主键),'name'
组 table 有列 'groupid'(主键),'name'
使用我上面代码中的设置,我 return 错误:
PHP 致命错误:无法在第 36 行的 /var/www/html/application/controllers/admin.php 中将类型为 stdClass 的对象用作数组,我似乎不明白为什么。
感谢您的帮助。
---------------- 编辑 ------
阅读评论和答案后,我相应地更改了一些内容。
型号:
function list_groups() {
$this->db->select('id, name');
$this->db->from('groups')->order_by('id','asc');
$query = $this->db->get();
return $query->result_array();
}
function list_users_in_group($groupid) {
$this->db->select('users.name, users.id, groups.id');
$this->db->from('users')->order_by('users.name','asc');
$this->db->where('groups.id', $groupid);
$this->db->join('groups', 'groups.id = users.groupid');
$query = $this->db->get();
return $query;
}
(基本上把list_groupsreturn做成了一个数组)
现在,根据我对该专栏的看法,我收到错误:
遇到了一个PHP错误
严重性:通知
消息:未定义的变量:id
文件名:admin/groups.php
行号:31
遇到了一个PHP错误
严重性:4096
消息:class CI_DB_mysqli_result 的对象无法转换为字符串
文件名:admin/groups.php
行号:31
再次感谢。
从你的代码示例中看不清楚,但似乎这一行
$data['group_results'] = $this->adminmodel->list_groups();
returns stdClass 的实例。但是,在下一行中,您想 foreach
在该实例上,这对于这个特定的 class.
是不可能的
要解决此问题,您可以简单地将 stdClass
实例类型转换为普通数组,如下所示:
$data['group_results'] = (array)$this->adminmodel->list_groups();
这样,您告诉 PHP 在分配时将该实例转换为数组,然后您可以对其执行 foreach
。
如果您控制 adminmodel->list_groups()
实现,您不妨重构它,使其 returns 成为一个数组而不是 stdClass
。我会把它留给你去弄清楚如何在 CodeIgniter 中这样做。
终于明白了。
我的主要问题是因为我没有为我的 $data['name_results'] 数组分配键,所以它显示了所有键或者只显示了前两个。分配密钥使一切变得更好。
控制器:
public function groups() {
if ($this->session->userdata('loggedin')) {
$session_data = $this->session->userdata('loggedin');
$data['username'] = $session_data['username'];
$this->load->view('header', $data);
$this->load->view('sidebar');
$data['group_results'] = $this->adminmodel->list_groups();
foreach ($data['group_results'] as $group_results) {
$data['name_results'][$group_results['id']] = $this->adminmodel->list_users_in_group($group_results['id']);
}
$this->load->view('admin/groups', $data);
$this->load->view('footer-nocharts');
}
else {
//If no session, redirect to login page
redirect('user/login', 'refresh');
}
}
型号:
function list_groups() {
$this->db->select('id, name');
$this->db->from('groups')->order_by('id','asc');
$query = $this->db->get();
return $query->result_array();
}
function list_users_in_group($groupid) {
$this->db->select('users.username, users.id, users.groupid');
$this->db->from('users')->order_by('users.username','asc');
$this->db->where('users.groupid', $groupid);
$query = $this->db->get();
return $query->result_array();
}
观点:
<tbody>
<?php foreach ($group_results as $group_entry): ?>
<tr class="odd gradeX">
<td><?php echo $group_entry['id']; ?></td>
<td><?php echo $group_entry['name']; ?></td>
<td>
<?php foreach ($name_results[$group_entry['id']] as $name): ?>
<?php echo "<a href='/admin/edituser/".$name['id']."'>".$name['username']."</a>, "; ?>
<?php endforeach; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
功能正常。感谢你们帮助我解决了一些我忽略的问题。
我需要从 'users' table 中获取一份名称列表及其 ID,其中包含我正在显示的 'groupid' 个组。我正在使用 CodeIgniter
在我看来,我想通过以下方式完成 table:
| GroupID | Group Name | Users in Group |
-------------------------------------------------------------
| 10001 | Group1 | User1, User3, User5 |
| 10002 | Group2 | User2, User6 |
| 10003 | Group3 | User4 |
所以基本上 table 中的每个 groupid 条目我想在列 "Users in Group" 下有一个该组中的用户列表,逗号分隔。 "Users in Group" 列中的每个用户都是他们 "Edit User" 页面的 link,该页面具有 URL mysite.com/admin/edituser/USERID
我的控制器:
class Admin extends CI_Controller {
function __construct() {
parent::__construct();
$this->load->database('admin');
$this->load->model('adminmodel','',TRUE);
}
public function groups() {
if ($this->session->userdata('loggedin')) {
$session_data = $this->session->userdata('loggedin');
$data['username'] = $session_data['username'];
$this->load->view('header', $data);
$this->load->view('sidebar');
$data['group_results'] = $this->adminmodel->list_groups();
foreach ($data['group_results'] as $group_results) {
$data['name_results'][$group_results['id']] = $this->adminmodel->list_users_in_group($group_results['id']);
}
$this->load->view('admin/groups', $data);
$this->load->view('footer-nocharts');
}
else {
//If no session, redirect to login page
redirect('user/login', 'refresh');
}
}
我的模特:
function list_groups() {
$this->db->select('id, name');
$this->db->from('groups')->order_by('id','asc');
$query = $this->db->get();
return $query->result();
}
function list_users_in_group($groupid) {
$this->db->select('users.name, users.id, groups.id');
$this->db->from('users')->order_by('users.name','asc');
$this->db->where('groups.id', $groupid);
$this->db->join('groups', 'groups.id = users.groupid');
$query = $this->db->get();
return $query;
}
和视图:
<table class="table table-striped table-bordered table-hover" id="dataTables-example">
<thead>
<tr>
<th style="width: 38px;">GroupID</th>
<th style="width: 150px;">Group Name</th>
<th style="width: 40px;">Users Assigned</th>
</tr>
</thead>
<tbody>
<?php foreach ($admin_results as $admin_entry): ?>
<tr class="odd gradeX">
<td><?php echo $admin_entry->id; ?></td>
<td><?php echo $admin_entry->name; ?></td>
<td>
<?php foreach ($name_results as $name): ?>
<?php echo "<a href='/admin/edituser/".$id."'>".$name."</a>, "; ?>
<?php endforeach; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
数据库非常简单,两个 table,每个两列。 用户 table 有列 'id'(主键),'name' 组 table 有列 'groupid'(主键),'name'
使用我上面代码中的设置,我 return 错误: PHP 致命错误:无法在第 36 行的 /var/www/html/application/controllers/admin.php 中将类型为 stdClass 的对象用作数组,我似乎不明白为什么。
感谢您的帮助。
---------------- 编辑 ------ 阅读评论和答案后,我相应地更改了一些内容。
型号:
function list_groups() {
$this->db->select('id, name');
$this->db->from('groups')->order_by('id','asc');
$query = $this->db->get();
return $query->result_array();
}
function list_users_in_group($groupid) {
$this->db->select('users.name, users.id, groups.id');
$this->db->from('users')->order_by('users.name','asc');
$this->db->where('groups.id', $groupid);
$this->db->join('groups', 'groups.id = users.groupid');
$query = $this->db->get();
return $query;
}
(基本上把list_groupsreturn做成了一个数组)
现在,根据我对该专栏的看法,我收到错误:
遇到了一个PHP错误
严重性:通知
消息:未定义的变量:id
文件名:admin/groups.php
行号:31
遇到了一个PHP错误
严重性:4096
消息:class CI_DB_mysqli_result 的对象无法转换为字符串
文件名:admin/groups.php
行号:31
再次感谢。
从你的代码示例中看不清楚,但似乎这一行
$data['group_results'] = $this->adminmodel->list_groups();
returns stdClass 的实例。但是,在下一行中,您想 foreach
在该实例上,这对于这个特定的 class.
要解决此问题,您可以简单地将 stdClass
实例类型转换为普通数组,如下所示:
$data['group_results'] = (array)$this->adminmodel->list_groups();
这样,您告诉 PHP 在分配时将该实例转换为数组,然后您可以对其执行 foreach
。
如果您控制 adminmodel->list_groups()
实现,您不妨重构它,使其 returns 成为一个数组而不是 stdClass
。我会把它留给你去弄清楚如何在 CodeIgniter 中这样做。
终于明白了。
我的主要问题是因为我没有为我的 $data['name_results'] 数组分配键,所以它显示了所有键或者只显示了前两个。分配密钥使一切变得更好。
控制器:
public function groups() {
if ($this->session->userdata('loggedin')) {
$session_data = $this->session->userdata('loggedin');
$data['username'] = $session_data['username'];
$this->load->view('header', $data);
$this->load->view('sidebar');
$data['group_results'] = $this->adminmodel->list_groups();
foreach ($data['group_results'] as $group_results) {
$data['name_results'][$group_results['id']] = $this->adminmodel->list_users_in_group($group_results['id']);
}
$this->load->view('admin/groups', $data);
$this->load->view('footer-nocharts');
}
else {
//If no session, redirect to login page
redirect('user/login', 'refresh');
}
}
型号:
function list_groups() {
$this->db->select('id, name');
$this->db->from('groups')->order_by('id','asc');
$query = $this->db->get();
return $query->result_array();
}
function list_users_in_group($groupid) {
$this->db->select('users.username, users.id, users.groupid');
$this->db->from('users')->order_by('users.username','asc');
$this->db->where('users.groupid', $groupid);
$query = $this->db->get();
return $query->result_array();
}
观点:
<tbody>
<?php foreach ($group_results as $group_entry): ?>
<tr class="odd gradeX">
<td><?php echo $group_entry['id']; ?></td>
<td><?php echo $group_entry['name']; ?></td>
<td>
<?php foreach ($name_results[$group_entry['id']] as $name): ?>
<?php echo "<a href='/admin/edituser/".$name['id']."'>".$name['username']."</a>, "; ?>
<?php endforeach; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
功能正常。感谢你们帮助我解决了一些我忽略的问题。