我用笨建立一个网站,我想从一个数据库表中,我们可以简单的叫表明建设项目清单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();
}
如果您发布从模型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;
}
现在,解析结果的视图,并在数据从那里玩。
在以前的答案加盟的想法,你可以使用查询构建器(使用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();
}
您可以在详细了解QueryBuilder的类文件 。
理想情况下,你想保持模型中的所有数据库查询。 您可以通过使用$这个 - >函数名调用模型中的其他功能()。
我相信这会实现你所追求的(这些去你的模型):
// 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();
}
我也建议使用笨的活动记录类( http://www.codeigniter.com/user_guide/database/active_record.html )做简单的数据库查询这样的,因为它使人们更方便看到你的查询正在进行