0

我有两张桌子:

MENU
->id_menu
->title
->page_id
->order

PAGES
->id_page
->title
->page
->slug

这是选择功能:

public function get_all_menu()
    {
        return $this->db
        ->select('menu.*, pages.id_page, pages.title AS page_title')
        ->from($this->table)
        ->join('pages','id_page = page_id')
        ->order_by($this->order_by)
        ->get()
        ->result_array();
    }

这是我的问题 - 菜单中的项目可以与页面连接,但也可以单独(不连接到页面)。这意味着MENU表中的page_id可以为 0。如果page_id为 0,我不会从上面的查询中获取该行。如何获取菜单中的所有项目(已连接的项目和与 page 未连接的项目)?

4

3 回答 3

3

您需要join type添加->join()

喜欢

public function get_all_menu()
 {
    return $this->db
    ->select('menu.*, pages.id_page, pages.title AS page_title')
    ->from($this->table)
    ->join('pages','id_page = page_id','left')
    ->order_by($this->order_by)
    ->get()
    ->result_array();
}

请参阅参考手册Active Record

于 2013-05-21T11:43:56.233 回答
1

根据评论的要求:

您需要使用“LEFT JOIN”从表中检索部分或不完整的值。

在这种情况下,常规连接正在查找两个表之间的匹配项。由于其中一个表中没有 id 0,因此无法检索匹配项并且不会选择该行。

如果未检索到匹配项,则使用 LEFT JOIN(或在适当时使用 RIGHT JOIN,基于“不完整”表),结果还将包含不匹配的行,其他表中的所有 NULL价值观

于 2013-05-21T11:50:16.013 回答
0

从你的控制器调用模型中的这个方法说你的模型名称是general_model

$value=('menu.*, pages.id_page, pages.title AS page_title');
        $joins = array
        (
              array
                (
                  'table' => 'pages',
                  'condition' => 'menu.id_page = pages.page_id',
                  'jointype' => 'leftouter'
                 ),

        );
$where_condition=array('menu.Id '=>'Enable','restaurant.Id'=>$rest_id);
            $data['detail'] = $this->general_model->get_joins('menu',$value,$joins,$where_condition,'menu.Id','asc')->result();

这里 $where_condition 是你想要传递的条件,如果你想删除你可以从函数中删除它。最后两个参数是 orderby

只需在您的 Model For Join 中使用此功能

public function get_joins($table,$value,$joins,$where,$order_by,$order)
    {
        $this->db->select($value);
         if (is_array($joins) && count($joins) > 0)
          {
             foreach($joins as $k => $v)
               {
                $this->db->join($v['table'], $v['condition'], $v['jointype']);
               }
          }
         $this->db->order_by($order_by,$order);
         $this->db->where($where);
        return $this->db->get($table);
     }

于 2013-05-21T11:46:49.757 回答