0

タイプフィールドに基づいて、ここで条件付き選択を作成しようとしています。$exp->addCase()呼び出しが無効で、それaddCase()が不明なメソッドであると表示されるのはなぜですか?

$query->select(function ($exp) use ($query) {
    $concatPerson = $query->func()->concat(['lastname' => 'literal', ', ', 'firstnames' => 'literal']);
    return $exp->addCase(
        [
            $query->newExpr()->eq('type', 1),
            $query->newExpr()->eq('type', 2),
        ],
        [$concatPerson, 'business_name'],
        ['string', 'string']
    );
});
4

1 に答える 1

2

のcallable は の callableselect()と同じようには機能しないためですwhere()。Callable forselect()は、渡された現在のクエリで呼び出され (つまりaddCase()、クエリ オブジェクトを呼び出しています)、選択するフィールドのリストを返すことが期待されます。

あなたがやろうとしているのは、式オブジェクトをに直接渡す必要があるということですselect()

$concatPerson = $query->func()->concat([
    'lastname' => 'literal', ', ', 'firstnames' => 'literal'
]);
$exp = $query->newExpr()->addCase(
    [
        $query->newExpr()->eq('type', 1),
        $query->newExpr()->eq('type', 2),
    ],
    [$concatPerson, 'business_name'],
    ['string', 'string']
);

$query->select(['field_alias' => $exp]);

こちらもご覧ください

于 2015-12-23T17:58:03.093 に答える