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

ETC

小心:这也将在同一个请求中从所有 find() 调用中删除这些字段。您可能希望将它们存储在 tmp 属性 $virtualFieldsTmp 中,以将它们放回您的虚拟字段中。

但是,如果不是在每个 find 调用中都使用虚拟字段,那么动态使用/添加虚拟字段可能会更明智:

public $availableVirtualFields = array(...);

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

例如。

于 2013-04-16T13:18:31.343 回答
1

如果您在控制器中使用它,请像这样使用它:

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

您需要通过模型的方法访问它。

于 2014-09-30T22:26:26.997 回答