1

私の問題は次のとおりです。たとえば、すべてを検索すると、$virtualFields も使用されますが、それらをいつ使用するかを選択するか、場合によっては無効にする可能性があります。

public $virtualFields = array(
    'sum_total_foods' => 'sum(OrderFood.quantity * OrderFood.price)',
    'sum_original_total_foods' => 'sum(OrderFood.quantity * OrderFood.original_price)',
    'sum_tax_amount' => 'sum((OrderFood.quantity * OrderFood.price) * OrderFood.tax)',
    'tax_amount' => '((OrderFood.quantity * OrderFood.original_price) * OrderFood.tax)',
    'total' => '(OrderFood.quantity * OrderFood.original_price)'
);

したがって、次の場合:

$this->find('all');

CakePHP はGROUP BYエラーを返します。もちろん、その理由はわかっています。

$virtualFieldsでは、どうすればオンザフライで無効にできますか?

4

2 に答える 2

4

「フィールド」を使用して、このクエリで使用するフィールドを指定できます (ホワイトリスト)。または、unset() を使用できます。

unset($this->virtualFields['total']);

注意: これにより、同じリクエストの後ですべての find() 呼び出しからこれらのフィールドも削除されます。それらを tmp 属性 $virtualFieldsTmp に保存して、仮想フィールドに戻すことができます。

ただし、すべての検索呼び出しで仮想フィールドが使用されていない場合は、仮想フィールドを動的に使用/追加する方がおそらく賢明です。

public $availableVirtualFields = array(...);

// before your call
$this->virtualFields['x'] = $this->availableVirtualFields['x'];
...
$result = $this->find(...);

例えば。

于 2013-04-16T13:18:31.343 に答える