我的问题是:当我执行查找全部时,也使用$ 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
?
答案 0 :(得分:4)
您可以使用“字段”指定要在此查询中使用的字段(白名单)。 或者您可以使用unset():
unset($this->virtualFields['total']);
等
小心:这也会在同一个请求中稍后从所有find()调用中删除这些字段。 您可能希望将它们存储在tmp属性$ virtualFieldsTmp中,以将它们放回虚拟字段中。
如果在每次查找调用时都不使用虚拟字段,那么动态使用/添加虚拟字段可能会更明智:
public $availableVirtualFields = array(...);
// before your call
$this->virtualFields['x'] = $this->availableVirtualFields['x'];
...
$result = $this->find(...);
例如。
答案 1 :(得分:1)
如果你在你的控制器中使用它,请使用它:
unset($this->YourModel->virtualFields['x']);
您需要通过模型的方法访问它。