我有一个Category
表,其中包含name
字段。
我希望能够使用PartnerCategory
表覆盖该名称并加入它。
通常我会得到Category
这样:
$options = array(
'contain' => array('PartnerCategory'),
'conditions' => array(
'Category.slug' => $slug,
'Category.status' => true,
)
);
$category = $this->Category->find('first', $options);
然后检查,如果ParentCategory.name
不为空,请用Category.name
替换它。
用php覆盖名称很乏味,所以我检查了虚拟字段。
我可以使用以下内容覆盖Category.name
:
$this->virtualFields = array(
'name' => 'SELECT name FROM app_partner_categories WHERE category_id = 1 AND partner_id = 60'
);
但是如果name
表中的PartnerCategory
为空或找不到数据,则Category.name
将为空。
如果找到Category.name
,我该如何覆盖PartnerCategory.name
?
答案 0 :(得分:0)
不确定,但这可能是一个可能的解决方案:
$joins = array(array('table' => 'app_partner_categories',
'alias' => 'PartnerCategory',
'type' => 'INNER',
'conditions' => array(
'PartnerCategory.category_id = Category.id'
)
)
);
$options = array(
'fields' => array('IF(PartnerCategory.name IS NULL or PartnerCategory.name = "", Category.name, PartnerCategory.name) as overwritten_name'),
'joins' => $joins,
'conditions' => array(
'Category.slug' => $slug,
'Category.status' => true,
)
);
$category = $this->Category->find('first', $options);