0

我有一个Categoryname字段的表。我希望能够使用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

4

1 回答 1

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);
于 2016-03-17T09:34:45.890 回答