0

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

下面的代码是我目前的尝试。现在这种工作,它根本不会出错,但只有保存字段会保存任何数据,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/'));
            }

当代码运行时,它会使用保存的消息进行重定向,但是当检查数据库时,只保存 invoicejoblist_id。

有没有做对的事?

格伦

更新 ::

好的,所以我要做的是构建一个发票系统,我有许多表,其中一个“invoicedatas”包含“id、workdes、price、invoicejoblists_id”。ID 是关键并被发送到自动计数。

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

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

我忘记添加的一些代码是变量,它们只是我要保存的 $this->data 的基本持有者。

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

请帮忙......

格伦。

好的,我试着看看我是否可以更详细地解释一下自己。

我将重新做我的工作,以使其更容易为 UI 规划任何东西。为了解释,我现在将有一个设置发票作业的表单,例如每个用户的作业编号、用户 ID 和其他位。此信息将进入一个表调用 invoicejoblist

第二个表 invoicedata 仅包含 workdes 和 price 以及 invociejoblists_id(这会将每一行与发票作业详细信息链接起来)。

但是无论我做什么,我都无法将其保存到工作量和价格中。这是我当前的测试设置的样子:

我的 .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' => ''
    )
);

我确实进行了一些检查以确保输入不为空,但将其删除以查看是否是我的问题,不确定是否正确。

希望得到更好的解释,我已经下降到正确的基础级别来测试保存任何数据集但它仍然不允许我,是因为我的模型中应该有一些东西吗?

欢迎任何帮助

格伦。

4

1 回答 1

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()- 无论如何)时,您的发票将保存以及两个价格(假设Invoice与 相关Price)。

如果您尝试手动构建数据,但不知道应该如何格式化,您总是可以创建一个像上面这样的表单,提交它,然后debug()查看结果以查看 CakePHP 将如何格式化它。

希望对您有所帮助。

于 2013-06-24T21:01:51.553 回答