6

ビューで $this->find('all') 配列を $this->find('list') にフォーマットする方法はありますか? 私が尋ねる理由は、その新しい配列をフォーム ヘルパー オプションに渡し、$this->find('all') 配列を使用して、必要な追加のものを構築できるようにするためです。

Array ( 
[0] => Array ( [School] => Array ( [id] => 0 [name] => Nature [address] => 112 Main [max_students] => 25 [application_level] => 5 ) ) 
[1] => Array ( [School] => Array ( [id] => 1 [name] => Math [address] => 112 Smith [max_students] => 25 [application_level] => 0 ) ) 
[2] => Array ( [School] => Array ( [id] => 2 [name] => Art [address] => 112 Lane [max_students] => 25 [application_level] => 0 ) ) 
)

これは、find('all') を実行したときに得られる配列です。次のように配列を構築したい:

Array (
[0] => 'Nature'
[1] => 'Math'
[2] => 'Art'
)

通常、これは $this->find('list') 関数によって行われます。配列全体が必要な理由は、 application_level を $this->Form->input() 関数に追加する必要があるためです。これは、アプリケーション レベルが関連付けられたクラスのオプションを追加する必要があるためです。そのため、以前の選択に基づいてアプリケーション レベルのショーのみを表示します。

編集: $this->find('list', [ここにパラメーターを挿入しますか?]);? 追加パラメータの設定方法がわかりません。

4

3 に答える 3

7

クエリが過度に複雑ではなく、過剰な数の結果を返さない場合は、クエリを 2 回実行します (1 回はすべてを検索し、もう 1 回はリストを検索します)。

すべてを検索し、リストし、最初に、渡すパラメーターに関してすべて同じものを検索します。例:

$this->Model->find('all', array(
    'conditions' => array(
        'field' => 500,
        'status' => 'Confirmed'
    ),
    'order' => 'id ASC'
));

... 文字通り に置き換えallますlist。あなたの場合、おそらく最も簡単なのは、それぞれに1回ずつ、2回行うことです。このような:

$parameters = array(
    'conditions' => array(
        'field' => 500,
        'status' => 'Confirmed'
    ),
    'order' => 'id ASC'
);

$alldata = $this->Model->find('all', $parameters);
$listdata = $this->Model->find('list', $parameters);

それ以外の場合は、ループして独自のリストを作成できます。

$list = array();

foreach($findall as $row) {
    $id = $row['id'];
    $name = $row['name'];
    $list[$id] = $name;
}

$this->set('listdata', $list);

あなたの質問に対する簡単な答えは、同じクエリからすばやく簡単に選択する方法はないということall です listが、パラメーター (条件、順序など) を事前定義された配列として渡すか、独自のリストに入力することで再利用できます。

于 2013-11-12T03:41:54.440 に答える
2

カイの答えを改善する。Hash クラスには、やりたいことをたった 1 行で実行できる、combine というメソッドがあります。

$list = Hash::combine($data,'{n}.Model.id','{n}.Model.name');

からの$listデータのようなフラットな配列になりますfind('list')

于 2015-04-29T11:10:59.707 に答える