2016-03-15 69 views
0

我有一个Category表和name字段。 我希望能够使用PartnerCategory表覆盖该名称并将其加入。cakephp具有子查询的虚拟字段,如果

所以我通常会得到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' 
); 

但是,如果在PartnerCategoryname是空的或没有MATHES被找到,Category.name将是空的。

如果找到PartnerCategory.name,我怎样才能覆盖Category.name

+0

你能后正是你尝试过什么? – Indrajit

+0

@Indrajit我更新了帖子 –

回答

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