2013-06-24 65 views
0

我的CakePHP函數中的SaveMany調用有問題。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」擁有「身份證,workdes,價格,invoicejoblists_id'包含在其中。 ID是密鑰併發送到自動計數。

當用戶開始製作新的發票時,他們會填寫一張保存在其他表格中的表單。而且在這種形式下,他們輸入該作品的工作細節和價格。

然後發送到我現在正在處理的函數,該函數不返回任何錯誤,但不保存。或者我應該說saveMany調用不起作用,saveField工作並保存我從其他表中調用的ID號。

我忘記添加的一點代碼是變量,它們只是我嘗試保存的$ this->數據的基本持有者。

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

請幫助......

格倫。

好的在這裏,我試着看看我能否更詳細地解釋我自己。

我打算重新做我的工作,以使它更容易爲UI劃分任何形式。爲了解釋,我現在將有一個設置發票作業的表單,例如每個用戶的jobnumber,用戶id和其他位。此信息將進入表呼叫invoicejoblist

第二張表invoicedata只有工作臺和價格以及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); 
} 

這些返回並非錯誤,但提交的信息workdes不會救。我把我的模型中的唯一的事情就是:

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

我確實有一些檢查,以確保輸入的地方不是空的,但除去他們看到,如果這是我的問題,不知道它這是正確與否。

希望更好的解釋,我已經下降到正確的基本水平,只是測試保存任何數據集,但它仍然不會讓我,是因爲我應該在我的模型中有東西?

任何幫助最受歡迎

格倫。

+1

你在做什麼似乎令人難以置信的矯枉過正。也許如果你解釋你實際想要做的事情,我們可以指出你朝着更好的方向發展。 – Dave

+0

爲什麼在同一個foreach迭代中兩次保存''invoicejoblists_id''?還要注意'saveMany()'用於在一個模型中同時保存許多記錄。所以通常你不需要使用foreach循環,因爲Cake會一次保存所有內容。因此,如果您想獲得答案,您需要指定您的Invoicedata模型的外觀。因爲我無法弄清楚你想要保存什麼,比如'''''''和''價格''是同一張表中的兩列。 – Ziemo

回答

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)。

如果您嘗試手動構建數據,但不知道應如何格式化,則始終可以創建上述表單,提交它,並查看CakePHP將如何格式化它的結果。

希望能幫助你澄清。

+0

非常感謝!我現在已經用我的表格付出了代價,而且這一切似乎都很好。 –