2013-04-16 33 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']); 

你需要通過模型的方法來訪問它。