1

イベントと結果の 2 つのコントローラーがあります。イベントには多くの結果があり、結果はイベントに属します。問題なく保存できますが、編集するときは、フォームのイベント部分の情報しか取得できず、自動的に入力されます。

次のような結果フォーム情報を作成します。

$option_number = 5;
        for ($i = 0; $i < $option_number; $i++) {
           echo $this->Form->select("Result.{$i}.object_id", $qual_options, array('empty' => false, 'class' => 'result-name'));
           echo $this->Form->hidden("Result.{$i}.id");
           echo $this->Form->hidden("Result.{$i}.type", array('value' => 'qual'));
           echo $this->Form->hidden("Result.{$i}.action", array('value' => 'add')); ?>
}

バックエンドで、自動魔法の人口を取得するためにこれを行っているとき:

if ($this->request->is('get')) {
            $this->request->data = $this->Event->findById($id);
}

問題なく動作しますが、結果を表示する方法がわかりません。私は多くのことを試しましたが、最も可能性が高いのは次のとおりです。

$this->request->data['Result'] = $this->Result->findAllByEventId($id);

これで、次のようなデータ構造になります。

[Result] => Array
        (
            [0] => Array
                (
                    [Result] => Array
                        (
                            [id] => 1
                            [object_id] => 1
                            [type] => qual
                            [action] => add
                            [amt] => 10
                            [event_id] => 1
                        )

                )

            [1] => Array
                (
                    [Result] => Array
                        (
                            [id] => 2
                            [object_id] => 2
                            [type] => qual
                            [action] => add
                            [amt] => 1
                            [event_id] => 1
                        )

                )         

            ... etc.

        )

)

これは間違いなく怪しく見えますが、それを操作して動作させることができないようです。

更新これについて言及する必要がありました。これは私のデータを保存したときの様子です。これを真似したいと思います!

[Result] => Array
    (
        [0] => Array
            (
                [object_id] => 1
                [type] => qual
                [action] => add
                [amt] => 0
                [event_id] => 3
            )

        [1] => Array
            (
                [object_id] => 1
                [type] => qual
                [action] => add
                [amt] => 1
                [event_id] => 3
            )

後の各数字キーには情報が含まれていることがわかります。代わりに、私の数値キーには Result という名前の配列も含まれていますが、それを適切に消す方法がわかりません! :} いつでもループして、CakePHP が望む形式でビルドできますが、適切に実行したいと考えています。上記の 1 行だけを変更する必要がありますが、アイデアが尽きてしまいました。

4

1 に答える 1

0

find('first')イベントに対してだけ使用するのはどうですか?[Result]hasMany であるため、多くの数値キーを含む 1 つのキーで Result モデルを返します。

$this->request->data = $this->Event->find('first', array(
  'conditions' => array(
    'Event.id' => $id
  ),
  'contain' => array(
    'Result'
  )
));

これは次のようなものを返します:

array(
  'Event' => array(
    'id' => 1,
    'name' => 'event name'
  ),
  'Result' => array(
    0 => array(
      'id' => 1,
      ...
    ),
    1 => array(
      'id' => 2,
      ...
    )
  )
);

必要に応じて、イベント キーの設定を解除できます。

于 2013-02-16T00:54:59.947 に答える