带子查询和if的cakephp虚拟字段

时间:2016-03-15 13:37:25

标签: mysql cakephp cakephp-2.6

我有一个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

1 个答案:

答案 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);