我想sava记录,但在for循环中,下一个id为null,如何保存具有此条件的记录,循环将在找到null时停止并保存以前的记录。
foreach($record['ProductPlan'] as $value=>$key)
{
$ProductsUser = array('product_plan_id'=>$key,'user_node_id'=>$userNodeId, 'is_active'=>1);
$this->$model->UserNode->ProductPlansUserNode->create();
$this->$model->UserNode->ProductPlansUserNode->save($ProductsUser);
}
并且错误是完整性约束违规:1048列'product_plan_id'不能为null
并在数组
'2'
array(
'product_plan_id' => '2',
'user_node_id' => '26',
'is_active' => (int) 1
)
'3'
array(
'product_plan_id' => '3',
'user_node_id' => '26',
'is_active' => (int) 1
)
'' // This is null how can i save previous records before null?
答案 0 :(得分:3)
正如您的错误所说,
Integrity constraint violation: 1048 Column 'product_plan_id' cannot be null
您必须更改此字段以允许db中的null
保存空记录。如果你想让db自己决定,那么该列的唯一键就是AUTO_INCREMENT
。因此,如果您为该列传递null
,则会使用下一个键。
答案 1 :(得分:3)
只需使用普通的if。以下是示例代码:
foreach ($record['ProductPlan'] as $value => $key) {
if (isset($key) && $key) {
$ProductsUser = array('product_plan_id' => $key, 'user_node_id' => $userNodeId, 'is_active' => 1);
$this->$model->UserNode->ProductPlansUserNode->create();
$this->$model->UserNode->ProductPlansUserNode->save($ProductsUser);
}
}
答案 2 :(得分:3)
我认为你在$ value和$ key之间感到困惑,反之亦然
在插入表之前,需要添加对空数组或空数组的检查 试试这个
foreach($record['ProductPlan'] as $value=>$key){
If($key){
$ProductsUser = array('product_plan_id'=>$key,'user_node_id'=>$userNodeId, 'is_active'=>1);
$this->$model->UserNode->ProductPlansUserNode->create();
$this->$model->UserNode->ProductPlansUserNode->save($ProductsUser);
}
}