我使用CodeIgniter构建网站,我想从数据库表中显示构建项目列表,我们只需调用project_table
。对于每个项目,我还有一个地址,存储在另一个表address_table
中,每个地址都有project_id
,将其链接到项目。
我在我的项目模型中创建了一个函数get_projects,用于获取项目信息并将其传递给项目视图,如下所示:
public function index() {
$data['projects'] = $this->project_model->get_projects();
$data['title'] = 'Ejendomme';
$this->load->view('templates/header', $data);
$this->load->view('projects/index', $data);
$this->load->view('templates/footer');
}
我的问题是我如何获取地址,链接到正确的项目并显示。我想我可以创建一个从视图调用的函数,它根据project_id
加载地址,但据我所知,这是非常糟糕的做法。有没有办法从控制器调用get_address
函数,并将其传递给视图,而不会丢失哪个地址属于哪个项目?
更新
这里的每个请求是函数get_project()
,它从数据库中获取项目信息。我考虑在其中调用get_address()
函数,但我不确定如何从函数中返回地址。
// Function to read all projects from database
public function get_projects() {
$query = $this->db->get('project_table');
return $query->result_array();
}
答案 0 :(得分:2)
如果您从模型中发布了get_projects方法,则更有用。无论如何,诀窍是利用模型 - 视图 - 控制器(MVC)架构,因此您可以从模型中选择数据库。 下面是一个从这两个表中提取数据的方法示例:
public function get_projects()
{
//for standard mySQL
//select only the db fields that you need
$query = "SELECT pt.*, at.* FROM project_table as pt, address_table as at WHERE pt.project_id = at.project_id";
$db_result = $this->db->query($query);
$result_object = $db_result->result();
/*
here you can add a check for the result (for instance to check if the return is not empty)
*/
return $result_object;
}
现在将结果解析为视图并从那里播放数据。
答案 1 :(得分:2)
加入前面答案中的想法,您可以使用查询构建器(使用CI 3名称)连接这两个表,并从模型中返回该方法所需的所有信息:
public function get_projects() {
$this->db->from('project_table');
$this->db->join('adress_table', 'adress_table.project_id', 'project_table.id');
return $this->db->get()->result_array();
}
您可以在documentation了解有关QueryBuilder类的更多信息。
答案 2 :(得分:1)
理想情况下,您希望将所有数据库查询保留在模型中。您可以使用$ this-> function_name()。
调用模型中的其他函数我相信这会实现你的目标(这些在你的模型中):
// Function to read all projects from database
public function get_projects() {
$results = $this->db->get('ed_projects')->result();
foreach($results as $r) {
$r->address = $this->get_address($r->id);
}
return $results;
}
// Function to read addresses for a $project_id
private function get_address($project_id) {
return $this->db->from('project_address_table')
->where('project_id', $project_id)
->get()->result();
}
我还建议使用codeigniter活动记录类(http://www.codeigniter.com/user_guide/database/active_record.html)来执行这样的简单数据库查询,因为它可以更容易地查看您的查询正在做什么