0

私は Cakephp 2.2 のサイトを持っており、クエリから取得した値を持つ多くの入力タイプのテキストを含むフォームを持っています。

送信ボタンを使用して保存するときに、入力テキストごとにデータベースのテーブルに新しいレコードを作成したいと考えています。

まず、クエリを単純な検索にして、それを変数 (prop) に入れました。foreach見つけたすべてのレコードに対して、入力テキストを作成します。しかし、保存するときは更新したくありませんが、テーブルに新しいレコードを作成するために、値を変更することも変更することもできませんが、各入力タイプを保存したいと考えています。私は何かを試してみましたが、すべてではなく、最後の入力テキストの値を持つレコードを 1 つだけ作成します。

私のテーブルにはいくつかのフィールドがあります

  • テーブル名:ingredient_properties
  • モデル名:IngredientProperty
  • フィールド: id, ingredient_id, property_id, user_id, created.modified

これは私の見解です *add_prop.ctp*

echo $this->Form->create('Ingredient', array ('class' => 'form')); 
    echo'<p>ELENCO PROPRIETA\'</p>';
    foreach($prop as $p){ 
        echo('<p>'.$p['Property']['PropertyAlias'][0]['alias']);
        echo $this->Form->input('IngredientProperty.ingredient_id', array ('type'=>'hidden', 'value'=>  $p['IngredientProperty']['ingredient_id'],'label'=> false, 'id' => 'id'));
        echo $this->Form->input('IngredientProperty.property_id', array ('type'=>'hidden', 'value'=>  $p['IngredientProperty']['property_id'],'label'=> false, 'id' => 'id'));
        echo $this->Form->input('IngredientProperty.value', array ('label'=> false, 'id' => 'value_'.$p['IngredientProperty']['id'], 'name' => 'value_'.$p['IngredientProperty']['id'],'value'=> $p['IngredientProperty']['value'], 'after' => '<div class="message">Inserisci un valore</div>'));
        echo('</p>');
}
echo $this->Form->submit('Salva', array('id'=>'add_prop'));
    echo $this->Form->end();

そして、これは私のコントローラーです Ingredient.php ( Ingredienthas many IngredientPropertyand Propertyhas many ingredientProperty)

public function add_prop($alias) {
        if ($this->request->is('post'))
        {
            //SAVE
            if ($this->Ingredient->IngredientProperty->saveAll($this->request->data)){
                $this->set('flash_element','success');
                $this->Session->setFlash ('Proprietà aggiornate con successo.');
                //$this->redirect(array('action'=>'photo',$alias));
            }
            else{
                $this->set('flash_element','error');
                $this->Session->setFlash('Errore di salvataggio proprietà');
            }
        }   
        else{
            //QUERY TO RETRIEVE DATA

            $this->set('prop',$this->Ingredient->IngredientProperty->find('all', array('recursive' => 2,
                        'conditions' => array('IngredientProperty.ingredient_id' => $id))));

            $this->loadModel('Property');
            $this->set('prop_all',$this->Property->find('all'));

            $this->loadModel('Unit');
            $this->set('unit',$this->Unit->find('all'));

        }
    }
4

1 に答える 1

1

次のコードを試してみて、うまくいかないかどうか尋ねてください。

echo $this->Form->create('Ingredient', array ('class' => 'form')); 
echo'<p>ELENCO PROPRIETA\'</p>';
foreach($prop as $p){ 
    echo('<p>'.$p['Property']['PropertyAlias'][0]['alias']);
    echo $this->Form->input('IngredientProperty.ingredient_id][', array ('type'=>'hidden', 'value'=>  $p['IngredientProperty']['ingredient_id'],'label'=> false, 'id' => 'id'));
    echo $this->Form->input('IngredientProperty.property_id][', array ('type'=>'hidden', 'value'=>  $p['IngredientProperty']['property_id'],'label'=> false, 'id' => 'id'));
    echo $this->Form->input('IngredientProperty.value][', array ('label'=> false, 'id' => 'value_'.$p['IngredientProperty']['id'], 'name' => 'value_'.$p['IngredientProperty']['id'],'value'=> $p['IngredientProperty']['value'], 'after' => '<div class="message">Inserisci un valore</div>'));
    echo('</p>');
}
echo $this->Form->submit('Salva', array('id'=>'add_prop'));
echo $this->Form->end();

そして、次の方法で、フォームが要求したデータをコントローラーにチェックインします。

pr($this->request->data);
die;
于 2012-09-11T05:38:20.710 に答える