2014-10-29 35 views
0

我試圖顯示CakePHP中將有附加屬性的列表框選項。CakePHP返回數組列表框的額外屬性

例如:

<option value="1" dataval-price="5">one</option> 
<option value="2" dataval-price="10">two</option> 
<option value="3" dataval-price="50">three</option> 

讀過其他地方,這只是建立像這樣的陣列的情況:

$options = array(
      2 => array('name' => 'One', 'value' => 1, 'dataval-price' => '5'), 
      2 => array('name' => 'Two', 'value' => 2, 'dataval-price' => '10'), 
      2 => array('name' => 'Three', 'value' => 3, 'dataval-price' => '50') 
); 

如何,我可以返回該格式的數據?下面的幫助程序將以強制列表框替代使用optgroup的格式返回數據。

$optionsArray = $this->TableX->find('all', array(
    'fields' => array('name', 'id', 'price'), 
    'order' => array('name' => 'ASC') 
)); 

回答

0

您可以使用別名域,像這樣:

$results = $this->Model->find('all', array(
    'fields' => array('name', 'id AS value', 'price AS dataval-price'), 
    'order' => array('name' => 'ASC') 
)); 

你的結果會出現這樣但是:

array(
    0 => array(
     'Model' => array(
       'name' => 'name', 
       'value' => 1, 
       'dataval-price' => 2.00 
     ) 
    ), 
    //etc 
); 

這可以通過使用CakePHP的哈希類固定

$results = Hash::flatten($results); 
$keys = str_replace('Model.', '', array_keys($results)); 
$results = array_combine($keys, array_values($results)); 
$results = Hash::expand($results);