CakePHP SaveMany没有保存

时间:2013-06-24 13:15:57

标签: cakephp

我的CakePHP函数中的SaveMany调用存在问题。

以下代码是我目前的尝试。这现在有点工作,它根本不会产生任何错误,但只有savefield会保存任何数据,saveMany,虽然它没有返回错误不保存数据?

请帮助???

             $InvoiceArrayData = array(
                      array('Invoicedata' => array('workdes' => $WorkHolder)),
                      array('Invoicedata' => array('price' => $PriceHolder)),
            );


            foreach($InvoiceArrayData as $InvoiceArrayKey => $InvoiceArrayValue) {
                debug($InvoiceArrayValue); 
                $this->Invoicedata->saveMany($InvoiceArrayValue['Invoicedata']);

                $this->Invoicedata->saveField('invoicejoblists_id', $MyJobIDInput);

                $this->Invoicedata->saveField('invoicejoblists_id', $MyJobIDInput);
                $this->Session->setFlash('Invoice Data Saved', 'default', array(), 'good');
                //$this->redirect($this->Auth->redirect('/AdminInvoiceSystem/'));
            }

当代码运行时,它会使用保存的meessaged重定向,但是当选中数据库时,只保存invoicejoblist_id。

还没有做对吗?

格伦

更新::

好的,我要做的是建立一个发票系统,我有一些表,其中一个'invoicedatas',其中包含'id,workdes,price,invoicejoblists_id'。 ID是密钥,并发送到自动计数。

当用户开始制作新发票时,他们会填写一张保存在其他表格中的表格。但是,在这种形式下,他们输入了该工作的工作细节和价格。

然后将其发送到我正在处理的函数,该函数不返回任何错误但不保存。或者我应该说saveMany调用不起作用,saveField工作并保存我从其他一个表调用的ID号。

我忘记添加的一些代码是vars,它们只是我试图保存的$ this->数据的基本持有者。

       $WorkHolder = $this->data['workdes'];
   $PriceHolder = $this->data['price'];

请帮助......

格伦。

好的,我试着看看能不能更详细地解释一下自己。

我将重新完成我的工作,使其更容易为UI划分任何形式。为了解释,我现在将有一个表单来设置发票作业,例如每个用户的作业数,用户ID和其他位。此信息将进入表呼叫invoicejoblist

第二个表invoicedata只包含workdes和price以及invociejoblists_id(这会将每一行与发票作业详细信息相关联)。

但无论我做什么,我都无法将其存入工作和价格。这就是我目前的测试设置:

MY .cpt文件:

$InvoiceMake = $this->Form->create('Invoice', array('url'=>'/InvoiceSet/', 'id' => 'InvoiceSet', 'inputDefaults' => array('div' => false) ) );
$InvoiceMake .= "<div id=\"InvoiceDataInput\">Please Input Description<br />";  
    $InvoiceMake .= $this->Form->textarea('Invoicedata.0.workdes');
    $InvoiceMake .= $this->Form->textarea('Invoicedata.1.workdes');
    $InvoiceMake .= $this->Form->textarea('Invoicedata.2.workdes');
    $InvoiceMake .= $this->Form->textarea('Invoicedata.3.workdes');
    $InvoiceMake .= $this->Form->textarea('Invoicedata.4.workdes');
    $InvoiceMake .= "</div>";
    $InvoiceMake .= $this->Form->submit('Make Invoice', array('div' => false, 'class' => 'ButtonInvoice'));
 $InvoiceMake .= $this->Form->end();
echo $InvoiceMake;

我在控制器中的测试功能:

function test() {
    debug($this->data); 
    $HoldeME = $this->data;
    $this->loadModel('Invoicedata');
            $this->Invoicedata->saveAll($HoldeME);
}

这些返回不是错误,但提交的工作信息不会保存。我在模型中唯一提到的是:

public $belongsTo = array(
    'Invoicejoblists' => array(
        'className' => 'Invoicejoblists',
        'foreignKey' => 'invoicejoblists_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

我确实有一些检查以确保输入不是空的但是删除它们以查看这是否是我的问题,不确定它是否正确。

希望更好地解释一下,我已经下到了正确的基本级别来测试保存任何数据集但它仍然不会让我,是因为我应该在我的模型中有什么东西?

欢迎任何帮助

格伦。

1 个答案:

答案 0 :(得分:1)

我真的不知道你在问什么,但是我是盲目的。

您应该可以在一个saveAll()中保存一个项目以及任意数量的子/相关项目。

根据CakePHP book中的大量说明,确保您的表单(或数据)格式正确。

举个例子:

echo $this->Form->create('Invoice');
echo $this->Form->input('name');
echo $this->Form->input('Price.0.amount');
echo $this->Form->input('Price.1.amount');
echo $this->Form->end('Submit');

然后,当您执行saveAll()(或saveMany() - 无论如何)时,您的发票将保存以及两个价格(假设InvoicePrice相关)。

如果您尝试手动构建数据,但不知道应该如何格式化,您可以随时创建一个上面的表单,提交它,并debug()结果,看看CakePHP将如何格式化它。

希望有助于为您澄清。