2017-03-23 37 views
1

Docs狀態,我們可以使用一個語法像Timelog__TotalHours命名計算字段和PHP將解析它作爲:TableAlias__ColumnAlias語法不被解析爲記錄

[0] => Array 
(
    [ProductsItems] => Array 
     (
      [Total] => 50 
    ) 
) 

在我的CakePHP/2.9.4設置我「M嘗試它在幾個地方,如pagination,但我得到其他任何字符串處理的列名:

[0] => Array 
(
    [ProductsItems__Total] => 50 
) 

在控制我的測試代碼:

$this->Paginator = $this->Components->load(
    'Paginator', 
    array(
     'fields' => array(
      "CONCAT_WS(' ', Usuario.nombre, Usuario.apellidos) AS Usuario__Empleado", 
     ), 
     'contain' => array(
      'Usuario', 
     ), 
     'limit' => 2, 
    ) 
); 
debug($this->Paginator->paginate()); 

...並打印:

array(
    (int) 0 => array(
     (int) 0 => array(
      'Usuario__Empleado' => 'Juan García' 
     ), 
     'Usuario' => array(
      'id' => '56' 
     ) 
    ), 
    (int) 1 => array(
     (int) 0 => array(
      'Usuario__Empleado' => 'María López' 
     ), 
     'Usuario' => array(
      'id' => '385' 
     ) 
    ) 
) 

我需要明確某處啓用此功能?

+0

請您分享您的查詢代碼 – tarikul05

+0

@ tarikul05當然,在這裏。 –

+0

您是否真的在模型上定義了虛擬域? – ndm

回答

3

首先,您應該在查詢之前定義虛擬字段(可以是模型或控制器)。

$this->CurrentModel->Usuario->virtualFields['Empleado'] = 0; 
$this->Paginator = $this->Components->load(
    'Paginator', 
    array(
     'fields' => array(
      "CONCAT_WS(' ', Usuario.nombre, Usuario.apellidos) AS Usuario__Empleado", 
     ), 
     'contain' => array(
      'Usuario', 
     ), 
     'limit' => 2, 
    ) 
); 
debug($this->Paginator->paginate()); 

它應該工作。

+0

就是這樣,非常感謝。但我承認我並不完全理解這個機制。如果該字段需要已經定義,那麼特定定義有什麼意義?這只是一種重寫原始定義的方式? –

+1

是的,類似的東西 – tarikul05