我有两个表一个用户,另一个用于项目列表
我的问题是我想在一行上显示每个项目(来自project_table)和属于列出项目的用户的电子邮件(来自user_table)
project_table有一行user_id(即来自user_table的id,用于标识发布项目的用户)
这是我的观点(project_view): 我在这种情况下显示来自project_table的数据,但我想从user_table显示特定用户的电子邮件
<?php
foreach($query as $row)
{
?>
<p> <?echo $row->pro_name ?></p>
<p> <?echo $row->duration ?></p>
<p> <?echo $row->budget ?></p>
<p>User email will be displayed here</p>
<?
}
我的模特:
function get_projects()
{
$query = $this->db->get('project_table');
return $query->result();
}
我的控制员:
function show_projects()
{
$data['query']=$this->project_model->get_projects();
$this->load->view('project_view', $data);
}
非常感谢任何关于如何实现这一点的想法
答案 0 :(得分:0)
尝试join
这个 -
1)模型
function get_projects()
{
$this->db->select('*');
$this->db->from('project_table');
$this->db->join('user_table', 'project_table.user_id = user_table.id');
$query = $this->db->get();
if($query->num_rows() > 0)
{
return $query->result();
}
}
2)控制器
$data['user_project'] = $this->project_model->get_projects();
$this->load->view($view, $data);
3)查看
foreach($user_project as $row)
{
echo "<p>" .$row->pro_name. "</p>";
echo "<p>" .$row->duration. "</p>";
echo "<p>" .$row->budget. "</p>";
echo "<p>" .$row->email. "</p>";
}
答案 1 :(得分:0)
您可以在模型中使用联接查询
function get_projects()
{
$query =$this->db->select('p.*,u.email')
->from('project_table p')
->join('user_table u','p.user_id = u.id')
->get();
return $query->result();
}
在您看来,您可以这样做
<?php
foreach($query as $row)
{
?>
<p> <?php echo $row->pro_name; ?></p>
<p> <?php echo $row->duration; ?></p>
<p> <?php echo $row->budget; ?></p>
<p><?php echo $row->email;?></p>
<?php
}
?>
答案 2 :(得分:0)
我会重写控制器和模型函数以允许用户参数:
function get_projects($user=null)
{
if ($user == null){
$query = $this->db->get('project_table');
}else{
$query = $this>db->get('project_table')->where('user_id',$user);
}
return $query->result();
}
function show_projects($user)
{
$data['query']=$this->project_model->get_projects($user);
$this->load->view('project_view', $data);
}
现在您可以使用用户参数
调用控制器http://..../show_user/1
答案 3 :(得分:0)
第一种方法是JOINs
$this->db->select('project_table.* as project, user.id as user_id, user.email as email')
->from('project_table')
->join('user', 'project.id = user_id');
$result = $this->db->get();
第二次不推荐
function get_projects()
{
$query = $this->db->get('project_table');
return ($query->num_rows() > 0) ? $query->result() : FALSE;
}
function get_email($id = FALSE) {
if ($id === FALSE) return FALSE;
$query = $this->db->get_where('user', array('user_id' => $id));
return ($query->num_rows() > 0) ? $query->result() : FALSE;
}
控制器中的某个地方......
if (!$projects = $this->model->get_projects()) {
foreach ($projects as $key => $project) {
# code...
$projects[$key]->user_email = $this->model->get_email($project->user_id);
}
//projects is now with user_email field
$this->load->view()...
} else {
//no data recieved
redirect(); //redirect to default_controller
}