2013-04-16 35 views
1

我的问题是:当我做了找到所有例如,$ virtualFields使用过,但我想,当使用它们选择,或可能禁用在某些情况下。未设置虚拟现场2.3

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

您可以使用“字段”来指定要在此查询中使用的字段(白名单)。在这个非常相同的请求这也删除所有这些领域找到()调用后: 或者你可以使用未设置():

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

小心。 您可能希望将它们存储在tmp属性$ virtualFieldsTmp中以将它们放回到您的虚拟域中。

它可能是明智的,但是,使用/添加动态,如果他们没有在每次使用虚拟领域找到拨打:

public $availableVirtualFields = array(...); 

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

例如。

+0

只是未设置的作品?哈哈哈,我不相信!谢谢马克! –

+0

你可能不会相信它:最后,它仍然只是PHP:D – mark

+0

是的D:我只是想使用CakePHP做所有事情,从来没有我'不可思议的'知识,哈哈。无论如何,非常感谢。 –

1

,如果你在你的控制器使用它这样使用它:

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

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