多个加入 codeigniter 未按预期工作

multiple join in codeigniter not working as expected

有 4 个table

option_group(id, optionGroupName)

category_optiongroup(categoryId, optionGroupId, inOrder)

product_option(productId, optionGroupId, optionId)

选项(id,optionValue)

一些产品还没有在 product_option table 中插入它的 optionValue 但我想获取主题所有是否插入。 例如具体产品的尺寸还没有设置。

这是我的模型,但它只 return 设置了所有选项值。

有没有可能用 IFNULL() 做到这一点?如果不是没关系

IFNULL(optionValue, 'Not Set')

$this->db->select('option.optionValue')
   ->from('category_optiongroup')
   ->where('categoryId', $data['categoryId'])
   ->join('product_option', 'product_option.productId='.$productId.
      ' AND product_option.optionGroupId=category_optiongroup.optionGroupId', 'left')
   ->join('option', 'option.id=product_option.optionId')
   ->order_by('category_optiongroup.inOrder', 'ASC');
$query = $this->db->get();
return $query;

你可以像这样使用 IFNULL

$this->db->select('IFNULL(`option`.optionValue,"Not Set")',false)
   ->from('category_optiongroup')       
   ->join('product_option', 'product_option.productId='.$productId.
      ' AND product_option.optionGroupId = category_optiongroup.optionGroupId', 'left')
   ->join('`option`', '`option`.id=product_option.optionId')
   ->where('categoryId', $data['categoryId'])
   ->order_by('category_optiongroup.inOrder', 'ASC');
$query = $this->db->get();
return $query;

两个提示:

第一个:选项product_option 个表需要左联接

第二:当然 IFNULL() 需要别名才能调用

$this->db->select('IFNULL(`option`.`optionValue`, "Not Set") AS optionValue', FALSE)
   ->from('category_optiongroup')
   ->join('product_option', 'product_option.productId='.$productId
            .' AND product_option.optionGroupId=category_optiongroup.optionGroupId', 'left')
   ->join('option', 'option.id=product_option.optionId', 'left')
   ->where('categoryId', $data['categoryId'])
   ->order_by('category_optiongroup.inOrder', 'ASC');
$query = $this->db->get();
return $query;