CodeIgniter 2 - 使用2个表关系

时间:2012-11-24 01:02:15

标签: php codeigniter-2

CodeIgniter和MVC / OOP的新手。我目前正在尝试解决的问题包括2个表。


图库表

ID

名称

clientID的


客户表

ID

名称


gallery ['clientID']引用客户端['id'],以便我可以检索名称。目前我的gallery_model.php文件看起来像

class Gallery_model extends CI_Model
    {

        public function __construct()
        {
            $this->load->database();
        }

    //Get all in progress galleries from client
    public function get_progress($id = FALSE , $clientRef = '205')
    {
        if($id == FALSE) {
            $query = $this->db->get_where('gallery', array('clientRef' => $clientRef, 'finish' => '0' ));
            return $query->result_array();
        }
    }
    //Get all proofed galleries from client
    public function get_proofed($id = FALSE , $clientRef = '205')
    {
        //get all galleries from client
        if ($id == FALSE) {
            $query = $this->db->get_where('gallery',array('clientRef' => $clientRef, 'finish' => '1'));
            return $query->result_array();
        }
    }

    //get the gallery selected
    public function get_gallery($id , $clientRef = '205')
    {
        //This returns individual galleries
        $query = $this->db->get_where('gallery', array('id' => $id));
        return $query->row_array();
    }
}

我的控制器如下:

    public function index()
    {
        //Proofed Albums
        $data['gallery'] = $this->gallery_model->get_proofed();
        //Albums that are in progress
        $data['in_progress'] = $this->gallery_model->get_progress();

        $this->load->view('templates/header',$data);
        $this->load->view('gallery/index',$data);
        $this->load->view('templates/footer');
    }

然后视图的输出是

$gallery['name'] - $gallery['clientId']

这样的事情的最佳做法是什么。我知道这可能很简单,但我想开始正确地做这件事。我应该使用$this->db->join();

吗?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

跟进William's answer,您可以使用CI的活动记录进行联接

$this->db->from('gallery')->join('client', 'gallery.id = client.id')->get()

答案 1 :(得分:1)

使用$this->db->join()确实是最好的(并且是通过Active Records完成的唯一方法,无需添加自己的SQL),可以在一个查询中从多个表中获取信息。

您可能已经意识到这一点,但为了以防万一(为了将来访问此页面的人的利益),CodeIgniter User Guide有一个很好的页面,详细说明了如何使用Active Records。

内部加入的默认值应该适用于您的目的。如果您有没有链接到客户的图库条目,并且您希望它们包含在结果中,那么您可能需要考虑其他类型的联接,您可以read about here