CakePHP查询与CASE WHEN那么ELSE条件

问题描述 投票:0回答:1
SELECT CASE WHEN a.type = 'property' THEN p.name ELSE r.name END AS `name`, a.*
FROM admin_alert a
LEFT JOIN  property p ON a.related_id = p.id 
LEFT JOIN  publisher r ON a.related_id = r.id 

如何在CakePHP中编写这个sql?

cakephp cakephp-3.0
1个回答
0
投票
$AdminAlerts = TableRegistry::get('AdminAlert')->find();

    $AdminAlerts = $AdminAlerts->join([
        'table' => 'property',
        'alias' => 'pr',
        'type' => 'LEFT',
        'conditions' => 'related_id = pr.id AND type = "property"',
    ]);
    $AdminAlerts = $AdminAlerts->join([
        'table' => 'publisher',
        'alias' => 'pu',
        'type' => 'LEFT',
        'conditions' => 'related_id = pu.id AND type = "publisher"',
    ]);

    $relatedName = $AdminAlerts->newExpr()
            ->addCase(
                [$AdminAlerts->newExpr()->add(['type' => 'property']),
                $AdminAlerts->newExpr()->add(['type' => 'publisher'])],

                [ new IdentifierExpression('pr.name'), new IdentifierExpression('pu.name')]

            );
    $AdminAlerts = $AdminAlerts->select(['id','related_id','type','title','message','name' => $relatedName]);

这很有效

© www.soinside.com 2019 - 2024. All rights reserved.