0

これを出力するデータベースにこのテーブルがあります:

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」フィールドが取得されます。

$prices という新しい配列を作り直したので、次のように出力されます...

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 )。

これを行うより良い方法はありますか?

4

2 に答える 2

3

仮想フィールドを使用できます。

あなたのモデルでは:

public $virtualFields = array(
  'display' => 'CONCAT(amount, " @ ", price)'
);

コントローラーで:

$prices = $this->Price->find('list', array(
  'fields' => array('id', 'display')
));
于 2013-05-08T17:30:14.727 に答える
0

これを行うには 2 つの方法があります。

  1. 配列を に作り直したと言っていました$prices。次に、そのリワークを変更して、$prices 配列が次のようになるようにします

    array('1' => '4 @ 6',
          /*id*/ => /*price*/
          /*etc*/);
    

    そしてそれをフォームに渡します

    echo $this->Form->input('Project.quantity', array(
      'options' => $prices
    ));
    
  2. 単純なドロップダウンの場合、find('list') でデータを取得します。これにより、ドロップダウンを作成するために必要な配列が得られます。表示フィールドを変更するには、モデルにこのような仮想フィールドを作成します

    public $virtualFields = array("display_price"=>"CONCAT(amount, ' @ ' ,price)");
    public $displayField = 'display_price';
    

    そうすれば、配列を作り直す必要はありません。他の形式で同じモデルの他のドロップダウンがある場合は、それらも変更されることに注意してください。それがモデルでそれを行うことの利点です...または、1つの部分でのみ実行したい場合の欠点です...ほとんどすべての場合と同様に、それはあなたの必要性に依存します:)

于 2013-05-08T17:29:29.507 に答える