cakephp saveMany使用$ fieldList(无表格)

时间:2012-06-16 02:46:13

标签: cakephp

我有这个$ data数组:(构建在shell上,而不是表单上)

(在这里调试)

array(
(int) 0 => array(
    (int) 0 => 's511013t',
    (int) 1 => 'id3422',
    (int) 2 => '1'
),
(int) 1 => array(
    (int) 0 => 's511013t',
    (int) 1 => 'id3637',
    (int) 2 => '1'
)
)

使用saveMany:

$this->Dir->saveMany($data, array( 'validate' => 'false', 'fieldList' => array('name','dir_dataname', 'project_id'))); 

保存失败,没有错误。

我不确定我的$ data数组是否格式正确,(我很困惑它是否应该有另一个级别)我是从sql选择等构建的。但是它确实包含了我需要保存的所有信息,单个模型。

我正在从Shell运行所有这些,它确实可以保存单个记录,只要每次都提供字段名称:

// this works
$this->Dir->save(array('name' => $data[0][0], 'project_id' => $data[0][2], 'dir_dataname' => $data[0][1]));

已经阅读保存您的数据,由于我的自定义$ data格式,我真的想使用saveMany和fieldList。 (我不想在我的$数据上插入字段名称) (没有sql_dump显示,因为从shell任务中获取它是非常麻烦的)

我整晚都想弄清楚,你能指出我正确的方向,拜托吗?

2 个答案:

答案 0 :(得分:2)

恕我直言,每个数组中的键都不是数据库表中的有效字段。它们应与您的表字段表示相同的名称。 从sql构建数组时,输出应如下所示 - 关联数组:

array(
(int) 0 => array(
    (string) name => 's511013t',
    (string) dir_dataname => 'id3422',
    (string) project_id => '1'
),
(int) 1 => array(
    (string) name => 's511013t',
    (string) dir_dataname => 'id3637',
    (string) project_id => '1'
)
)

Cake2.0 Docs

$this->Dir->saveMany($data);

答案 1 :(得分:0)

您可以通过

获取日志
debug($this->Dir->getDataSource()->getLog());

看起来好像你错误地使用fieldListfieldList是要保存到数据库的白名单字段列表,而不是您正在使用的“映射”。

您需要在数组中为每条记录指定field => value对,而不是数字索引。我可能错了,但我从来没有见过它,根据文档,它看起来并不是那样。