视图表连接在codeigniter中

时间:2013-03-04 09:43:33

标签: php mysql codeigniter

我有两个表,一个类别表和一个工厂表。 在我的类别表中,我有以下行。

idcategory
category

在我的工厂表中,我有以下行。

idfactories
factoryname
postcode
country
telephone number
email
website
profile
adress
idcategory

我有另一张桌子,我也存放了idfactory和idcategory。

我的factorycategories表包含以下行。

idfactorycat
idfactory
idcategory
factorycat

我加入了我的类别模型,因为我想要访问我网站上的类别,当我点击某个类别时,必须显示存储在该类别中的工厂。

在我的模型中我有

$this->db->select('*');
$this->db->from('bedrijfcategorieen');
$this->db->join('bedrijfcategorieen', 'bedrijfcategorieen.idbedrijven = bedrijven.idbedrijven');
$this->db->join('bedrijfcategorieen', 'bedrijfcategorieen.idcategorieen = categorieen.idcategorieen');
$query = $this->db->get();

我实际需要存储在我的控制器和视图中? 我对codeigniter很新。

ps:我翻译了我的行,所以对其他人来说很容易理解,因为我是荷兰人。

由于

编辑: 解释起来有点棘手,但我有侧边栏目。

Categories

cars
cars parts
books
etc etc...

我想创建每个类别的链接。

点击时,让我们说汽车。我想进入一个结果页面,工厂出现的类别id = 1,因为汽车的id = 1。 这是我的实际问题。我想我需要加入。

希望你明白。

再次感谢。

2 个答案:

答案 0 :(得分:0)

这更像是一般的MVC问题。您的数据库架构对于这个问题并不重要,因为您想知道如何访问数据而不是如何优化您的查询(根据我的理解)......

因此,您的模型需要返回一些内容,例如return $query->result();。然后,您可以在控制器中使用它来获取该数据并将其发送到视图。例如:

控制器

$data['my_data'] = $this->my_model->my_get_function();  // this is calling your function above
$this->load->view('my_view', $data);  // loads my_view and sends the data array to it

在视图中保留所有presentional(HTML)数据,但您可以访问控制器发送的数据,在我们的情况下,$my_data是一个包含所有返回的对象您所做查询的行。这将显示数据:

查看

// ...html here...
<div>
    <pre>
        <?php var_dump($my_data); ?>
    </pre>
</div>
// ...html here...

这些只是控制器和视图的示例部分。阅读有关MVC的更多信息,以便更好地了解它应该如何工作。

答案 1 :(得分:0)

编辑以匹配您的编辑

根据你的编辑,我只是​​在这里给你基本的想法。有关详细信息,请参阅codeigniter手册:

//模型

function getresults($segment3){
    $this->db->select('*');
    $this->db->from('category');
    $this->db->join('factories', 'category.idcategory. ' = factories.idfactories');
    $this->db->join('factorycategories', 'factorycategories.idfactory = ' . $segment3); 

    $query = $this->db->get();
    return $query->result();
}

//Note that it would return only results that match in all tables. 
//If you need to return more of a table, use right join or left join.


function categories(){ //Call this from controller to create the initial links
    $query = $this->db->get('category');
    return $query->result();
}

//控制器

function pageCategories(){ // Shows initial categories links on page
    $data["links"] = $this->modelname->categories();
    $this->load->view("page-to-view");
}

function pageFactories(){ // takes categories and shows factories
    $this->load->helper('url');
    $segment3 = $this->uri->segment(3);
    $data["results"] = $this->modelname->getresults($segment3);  
    $this->load->view("page-to-view");
}

//视图

print_r($results); //run a test - debug

显示您的链接(注意细分模式):

if(isset($links) && is_array($links)){
    foreach($links as $k => $value){
        echo '<a href="'.base_url().'Yourcontroller/pageFactories/'.$value->idcategory.' ">' .$value->category. '</a>';
        echo "<br />";
    }
}

if(isset($results ) && is_array($results )){
    foreach($results as $key => $row){
        echo $row->category;
        echo "<br />";
        echo $row->factoryname;
        //It goes on as much as you want
    }
}

这只是让你了解全局。

你怎么把它转换成荷兰语是我无法弄清楚的。注意:google.translate.com会弄乱你可能需要清理的大量空白区域。