【问题标题】:hasMany through Join Model not saving to databasehasMany 通过加入模型不保存到数据库
【发布时间】:2012-08-08 22:21:11
【问题描述】:

当用户在我的表单中输入数据时,它不会保存到数据库中,这是我的表的结构

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

这是发票模型

类发票扩展 AppModel{ var $name='发票'; var $hasMany = 数组( '字段发票');

这是字段模型

    var $hasMany = array(
    'FieldsInvoice'
    );

这里是 fieldsInvoice 模型

<?php
class FieldsInvoice extends AppModel {
    public $belongsTo = array(
        'Field' => array(
            'className' => 'Field',
            'foreignKey' => 'field_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Invoice' => array(
            'className' => 'Invoice',
            'foreignKey' => 'invoice_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );
}

这是发票控制器中的创建函数

    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'))
        {

            $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');
            //}
        }
    }
}

这里是创建函数的视图

<?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');?>

调试视图时,这是接收到的输出

array(
    'Invoice' => array(
        'id' => ''
    ),
    'FieldsInvoice' => array(
        (int) 5 => '',
        'amount' => 'test',
        (int) 6 => '',
        'description' => 'test1',
        (int) 7 => '',
        'totalacctowing' => 'test2',
        (int) 8 => '',
        'pmtinfo' => 'test3'
    )
)

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    代替:

    $this->Invoice->save($this->request->data);
    

    在 if 条件中使用以下语法;

    $this->Invoice->save($this->request->data, array('deep' => true));
    

    This link 将指导您保存相关数据。

    【讨论】:

    • 我已经通过join模型变成了hasMany。我将更新我的代码,但它没有将 field_id 和 enter_value 保存到 fieldsinvoice 表中
    【解决方案2】:

    您是否尝试过调试?尝试查看您的表单数据,看看是否所有字段都正常。使用debug()pr().

    【讨论】:

    • 是的,我已经调试了表单数据,不幸的是它不正确,我不知道如何修复它。
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多