codeigniter区分JOINed表中的字段名称

Pat*_*ick 2 codeigniter

我需要从两个表中检索数据.第一个是事件列表,第二个是场地列表.

我在两个表中都有一个具有相同名称的字段:events.venue(这是一个ID)和venues.venue是该地方的名称,比如说"blues bar".这些表可以在events.venue = venues.id上加入.

我模特的片段:

$this->db->select('events.*, venues.*');
        $this->db->join('venues', 'events.venue = venues.id');
        if ($date != 'all')
        {
            $this->db->where('date', $date);
        }

        if ($keyword)
        {
            $this->db->like('description', $keyword);
            $this->db->or_like('band', $keyword);
            $this->db->or_like('venue', $keyword);
            $this->db->or_like('genre', $keyword);
        }

        $Q = $this->db->get('events');
        if ($Q->num_rows() > 0)
        {
            foreach ($Q->result() as $row)
            {
                $data[] = $row;
            }
        }

        $Q->free_result();
        return $data;
Run Code Online (Sandbox Code Playgroud)

视图片段:

foreach ($events as $row) {
            echo    "<p>{$row->band} ({$row->genre})<br />";
            echo    "Playing at: {$row->venue}<br /></p>"; // echoes "blues bar"
//more here...
}
Run Code Online (Sandbox Code Playgroud)

2个问题:1)为什么$ row->场地回应场地.而不是events.venue?

B)我如何区分它们?例如.如果我想同时回应events.venue和venues.venue怎么办?我可以做一些像"SELECT venues.venue as name_of_the_venue"这样的事情,但是当我选择了*时,我怎么能这样做呢?

Ira*_*lis 6

快速解决:

$this->db->select('events.col1 AS ev_col1,
                   events.col2 AS ev_col2,
                   venues.col1 AS ven_col1,
                   venues.col2 AS ven_col2);
Run Code Online (Sandbox Code Playgroud)

其中col1,col2是表中的列.然后用

$row->ven_col1 
Run Code Online (Sandbox Code Playgroud)

访问值.

  • 为什么不尝试一下,$ this-> db-> select('*,venues.venue AS venue_name') (2认同)
  • 伊拉克利斯 - 你比我快!:)我只是发表评论说我试过这个:$ this-> db-> select('events.*,venues.*,events.venue AS venue_id'); 它工作了!我并不完全确定这是良好做法的最佳选择,但它确实有效! (2认同)