2014-01-20 200 views
3

我目前正試圖將各種記錄保存到同一模型中。CakePHP不保存數據到數據庫

我已閱讀有關數據格式的文檔,並且我的自定義數據數組符合此要求。

這是我的函數:

$k = 0; 
foreach($this->request->data['FileData'] as $data) { 
    $name = substr($data['name'],0,strpos($data['name'],'_')); 
    $ext = substr($data['name'],strrpos($data['name'],'.')+1); 
    $display_name = str_replace('.'.$ext,'',str_replace($name . '_','',$data['name'])); 
    $Clinic = $this->Clinic->find('first', 
     array(
      'conditions' => array(
       'Clinic.name' => strtoupper($data['owner']) 
      ), 
      'fields' => array('id') 
     ) 
    ); 
    $Data['Upload'][$k]['clinic_id'] = $Clinic['Clinic']['id']; 
    $Data['Upload'][$k]['file_name'] = $data['name']; 
    $Data['Upload'][$k]['display_name'] = $display_name; 
    $Data['Upload'][$k]['extension'] = $ext; 
    $k++; 
} 
$this->Upload->create(); 
if ($this->Upload->saveMany($Data,array('deep'=>true))) { ** READ BELOW 
    $this->Session->setFlash(__('The upload has been saved.')); 
    return $this->redirect(array('action' => 'index')); 
} else { 
    $this->Session->setFlash(__('The upload could not be saved. Please, try again.')); 
} 

我沒有得到任何驗證錯誤。傳遞給這個函數的數據,看起來像如下:

array(
    'Upload' => array(
     (int) 0 => array(
      'clinic_id' => '72', 
      'file_name' => 'MAHLUNGULU CLINIC_0_Guide_Tax_Season_2012_Insert_Afrikaans.pdf (6).pdf', 
      'display_name' => '0_Guide_Tax_Season_2012_Insert_Afrikaans (6)', 
      'extension' => 'pdf' 
     ), 
     (int) 1 => array(
      'clinic_id' => '79', 
      'file_name' => 'ZAMA ZAMA CLINIC_1377256_515345465221385_1613340746_n.jpg', 
      'display_name' => '1377256_515345465221385_1613340746_n', 
      'extension' => 'jpg' 
     ), 
     (int) 2 => array(
      'clinic_id' => '72', 
      'file_name' => 'MAHLUNGULU CLINIC_07reader.xlsx', 
      'display_name' => '07reader', 
      'extension' => 'xlsx' 
     ), 
     (int) 3 => array(
      'clinic_id' => '79', 
      'file_name' => 'ZAMA ZAMA CLINIC_13-disturbed-i_still_havent_found_what_im_looking_for.mp3', 
      'display_name' => '13-disturbed-i_still_havent_found_what_im_looking_for', 
      'extension' => 'mp3' 
     ) 
    ) 
) 

(我知道這是不可思議的數據,但它的測試數據)

**我曾嘗試儲蓄下面的方法,所有的人都失敗:

$this->Upload->saveMany($Data,array('deep',true)); 
$this->Upload->saveMany($Data['Upload'],array('deep',true)); 
$this->Upload->save($Data); 
$this->Upload->save($Data['Upload']); 
$this->Upload->saveAll($Data); 
$this->Upload->saveAll($Datap['Upload']); 

他們都沒有工作。請幫忙,我做錯了什麼?

+0

DarkRanger我編輯我的答案。 – Perefexexos

回答

1

$data['modelname']['dbfieldname'] $this->modelname->save(data);

+0

所以我必須做'x'量的單獨保存,並且不能一次保存所有它們? – Albert

+0

我們可以看到你的模型嗎?當您嘗試保存單個記錄時它工作嗎? 我也建議使用CakePHP的測試套件和調試欄插件來分析發生了什麼問題。 – 2014-01-20 17:38:38

+0

感謝您的建議我看看我的模型。原來其中一個字段被設置爲日期時間(出於某種荒謬的原因),因此它失敗了,因爲它收到了一個字符串。它現在有效。我沒有得到的是爲什麼當我執行$ this-> validationErrors()時沒有返回。 – Albert

1

您的文章數據應該是在格式蛋糕預計,如:data[Model][some_field]$this->modelname->save(data);

*EDIT*

看着它好一點,我覺得你的陣列是在錯誤的順序,應該是:

$Data[$k]['Upload']['display_name'] = $display_name; 
$Data[$k]['Upload']['extension'] = $ext; 

即數字索引中的條目是Model.key。

...閱讀文檔了一下,我看到:

For saving multiple records of single model, $data needs to be a numerically indexed  array of records like this: 

$data = array(
    array('title' => 'title 1'), 
    array('title' => 'title 2'), 
); 


It is also acceptable to have the data in the following format: 

$data = array(
    array('Article' => array('title' => 'title 1')), 
    array('Article' => array('title' => 'title 2')), 
); 

here。所以你根本不需要Model指示符,或者它必須在數字索引之後,就像我給出的例子。祝你好運。如果它不起作用,請在core.php中調試並查看生成的SQL(如果有的話)。

+0

所以我必須做'x'量的單獨保存,不能一次保存所有這些? – Albert

+0

'$ this-> modelname-> saveAll(data);' – Perefexexos

+0

正如我的問題所述,不起作用。 – Albert