CakePHP无法将数据保存到数据库

3

我正在尝试将不同的记录保存到同一个模型中。

我已经阅读了有关数据格式的文档,并且我的自定义数据数组符合这个要求。

这是我的函数:

$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']);

它们都不起作用。请帮忙,我做错了什么?


DarkRanger,我编辑了我的答案。 - Perefexexos
2个回答

1
你的帖子数据应该符合cake所期望的格式,例如:data[Model][some_field] $this->modelname->save(data); *编辑* 我仔细看了一下,我认为你的数组顺序不对,应该是:
$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')),
); 

这里开始。所以你要么不需要任何模型指示器,要么它必须在数字索引之后,就像我给出的例子一样。祝你好运。如果不起作用,请在core.php中增加调试并查看生成的SQL(如果有)。


那么我必须分别保存x次,不能一次性保存所有吗? - Bird87 ZA
$this->modelname->saveAll(data); - Perefexexos
抱歉,尝试使用 $this->Upload->saveMany($Data['Upload'], array('deep' => true)); - Perefexexos
对于我的问题,是由于生成的表单将模型更改为了“Post”,而不是我的模型。只需将代码行$this->Form->create('Post'); 更改为 $this->Form->create(); 即可解决问题! - Kingsolmn

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

那么我必须进行 x 次单独的保存,不能一次性保存所有内容吗? - Bird87 ZA
我们能看到你的模型吗?当你尝试保存单个记录时,它是否有效?我还建议使用CakePHP的测试套件和调试栏插件来尝试分析出错的原因。 - user1321693
谢谢您建议我检查我的模型。结果发现其中一个字段被设置为日期时间(出于某种荒谬的原因),因此失败,因为它接收到了一个字符串。现在它可以工作了。我不明白的是,为什么当我执行 $this->validationErrors() 时,它没有返回错误信息。 - Bird87 ZA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接