CakePHP SaveMany 不保存
Posted
技术标签:
【中文标题】CakePHP SaveMany 不保存【英文标题】:CakePHP SaveMany not saving 【发布时间】:2013-06-24 13:15:56 【问题描述】:我的 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 号。
我忘记添加的一些代码是 vars,它们只是 $this->我要保存的数据的基本持有者。
$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);
这些返回不是错误但提交的workdes信息不会保存。我在模型中添加的唯一内容是:
public $belongsTo = array(
'Invoicejoblists' => array(
'className' => 'Invoicejoblists',
'foreignKey' => 'invoicejoblists_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
我确实进行了一些检查以确保输入不为空,但将其删除以查看是否是我的问题,不确定是否正确。
希望得到更好的解释,我已经下降到正确的基础级别来测试保存任何数据集但它仍然不允许我,是因为我的模型中应该有一些东西吗?
欢迎任何帮助
格伦。
【问题讨论】:
你正在做的事情似乎太过分了。也许如果你解释一下你真正想要做什么,我们可以为你指明一个更好的方向。 你为什么在同一个foreach迭代中保存'invoicejoblists_id'
两次?另请注意,saveMany()
用于在一个模型中同时保存多条记录。所以通常你不需要使用 foreach 循环,因为 Cake 会一次保存所有内容。因此,如果您想获得答案,您需要指定您的 Invoicedata 模型的外观。因为我不知道你要保存什么,比如''workdes''
和'price'
是同一张表中的两列?
【参考方案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 将如何格式化它.
希望对您有所帮助。
【讨论】:
非常感谢!我现在已经用我的表格付款了,这一切似乎都很好。以上是关于CakePHP SaveMany 不保存的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP - 当某些字段为空时,防止模型数据保存在 saveMany 调用中