1

こんにちはすべて私はhasManywithjoinsアソシエーションを使用してデータベースに情報を追加しようとしています

Invoice - id, sender_id, receiver_id, template_id
Field - id, name, description, default_value, template_id
fields_invoices - id, invoice_id, field_id, entered_value

これがビューです

<?php echo $this->Form->create('FieldsInvoice'); ?>
<?php foreach ($fields as $field): ?>
<?php echo $this->Form->hidden($invoice_id); ?>
<?php echo $this->Form->hidden($field['Field']['id']); ?>
<?php echo $this->Form->Input($field['Field']['name'], array('default' =>$field['Field']['default_value'])); ?>
<?php endforeach ;?>
<?php echo $this->Form->End('Submit');?>

これがコントローラーです

public function create($id)
    {   
    $this->set('title_for_layout', 'Create Invoice');
    $this->set('stylesheet_used', 'homestyle');
    $this->set('image_used', 'eBOXLogoHome.png');   
    $this->layout='home_layout';


     if (!is_numeric($id)) throw new BadMethodCallException('I need an ID');
     $this->Invoice->id = $id;
     if (!$this->Invoice->exists()) throw new NotFoundException('Invalid ID');

    $this->set('invoice_id',$id);

    $names = $this->Invoice->find('list',array(
    'fields'=>array('template_id'),
    'conditions'=>array('id'=>$id)));

    $fields = $this->Field->find('all', array(
     'conditions'=>array(
     'template_id'=>$names)));

    $this->set(compact('fields'));
    $this->set(compact('invoice_id'));

    $this->set('name',$names);
    $this->Invoice->create();
    if(empty($this->data)){
        $this->data= $this->Field->read($id);
    } 
    else{
        if($this->request->is('post'))
        {
            die(debug($this->data));

            $this->Invoice->create();
            if($this->FieldsInvoice->save($this->request->data, array('deep'=>true)));
            {
            $this->Session->setFlash('The field has been updated');
            $this->redirect(array('controller'=>'invoices', 'action'=>'index'));

            }
            //else{
            $this->Session->setFlash('Could not be saved');
            //}
        }
    }
}

これは、デバッグが使用されたときに出力されるものです

\app\Controller\InvoicesController.php (line 134)
array(
    'FieldsInvoice' => array(
        (int) 87 => '',
        (int) 0 => '',
        'invoiceno' => 'test1',
        (int) 99 => '',
        'duedate' => 'test2',
        (int) 999 => '',
        'amount' => 'test3',
        (int) 9999 => '',
        'description' => 'test4'
    )
)

すべての正しい情報がありますが、正しい場所に送信されていません。最初のintは、、invoice_id他のintはfield_idであり、「test1」、「test2」、「test3」、「test4」はentered_valueです。どういうわけか、同じ配列にビューを保存するようにビューをコーディングする必要があります。これをinvoice_id実現field_id,test1するにはどうすればよいですか?

4

1 に答える 1

1

フィールドごとに2つの非表示フィールドを作成している理由がわかりません。

最初にこれを読んでください:http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-hasone-hasmany-belongsto

echo $form->input('Account.0.name', array('label' => 'Account name'));
echo $form->input('Account.0.username');
echo $form->input('Account.0.email');

そしてさらに読む: http: //book.cakephp.org/2.0/en/models/saving-your-data.html#saving-hasmany-through-data

于 2012-08-13T02:29:35.423 に答える