关系型数据库和笨(Relational databases and CodeIgniter)

2019-10-21 09:05发布

我用笨建立一个网站,我想从一个数据库表中,我们可以简单的叫表明建设项目清单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();
}

Answer 1:

如果您发布从模型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;
}

现在,解析结果的视图,并在数据从那里玩。



Answer 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();
}

您可以在详细了解QueryBuilder的类文件 。



Answer 3:

理想情况下,你想保持模型中的所有数据库查询。 您可以通过使用$这个 - >函数名调用模型中的其他功能()。

我相信这会实现你所追求的(这些去你的模型):

// 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 )做简单的数据库查询这样的,因为它使人们更方便看到你的查询正在进行



文章来源: Relational databases and CodeIgniter