我的数据库中有这个表输出:
array(
(int) 0 => array(
'Price' => array(
'id' => '1',
'amount' => '20',
'price' => '180.00',
'type_id' => '1',
'active' => 'a'
)
),
(int) 1 => array(
'Price' => array(
'id' => '2',
'amount' => '30',
'price' => '232.50',
'type_id' => '1',
'active' => 'a'
)
),
......等等。
我需要在表单中下拉显示金额和价格(即“20 @ 180.00”),但选中后,会获取“id”字段。
我重新设计了一个名为$ price的新数组,所以输出就像这样......
array(
(int) 0 => array(
'id' => '1',
'amount' => '20',
'price' => '180.00',
'type_id' => '1',
'active' => 'a',
'display' => '20 @ 180.00'
),
(int) 1 => array(
'id' => '2',
'amount' => '30',
'price' => '232.50',
'type_id' => '1',
'active' => 'a',
'display' => '30 @ 232.50'
但是,我不确定该阵列是否必要。
但主要问题是我不知道在表单选项中放入什么以使其选择“显示”字段。
echo $this->Form->input('Project.quantity', array(
'options' => $prices[?????]['display']
));
只需添加
即可'options' => $prices
在下拉列表中显示了很多内容(http://f.cl.ly/items/1e0X0m0D1f1c2o3K1n3h/Screen%20Shot%202013-05-08%20at%201.13.48%20PM.png)。
有更好的方法吗?
答案 0 :(得分:3)
您可以使用virtual fields。
在你的模特中:
public $virtualFields = array(
'display' => 'CONCAT(amount, " @ ", price)'
);
在控制器中:
$prices = $this->Price->find('list', array(
'fields' => array('id', 'display')
));
答案 1 :(得分:0)
两种方法。
你说你将你的数组改成了$prices
。然后,更改返工,以便$ prices数组看起来像这样
array('1' => '4 @ 6',
/*id*/ => /*price*/
/*etc*/);
然后将其传递给表单
echo $this->Form->input('Project.quantity', array(
'options' => $prices
));
对于简单的下拉列表,使用find('list')检索数据。这将为您提供一个类似下拉列表所需的数组。要更改显示字段,请在模型
中创建如下的虚拟字段public $virtualFields = array("display_price"=>"CONCAT(amount, ' @ ' ,price)");
public $displayField = 'display_price';
这样你就不必重新修改阵列了。 如果您在其他形式中有相同型号的其他drowpdowns,请注意这些也会改变。这就是在模型中做到这一点的优势......或者不利的是,如果你只想在一个部分做到这一点......就像几乎所有事情一样,这取决于你的需求:)