我试图通过Yii中的模型将多个记录插入到我的数据库中。我使用foreach将数据传递给控制器的模型。首先,它检查数据库中是否存在该字段,如果结果为false,则插入数据库。但是,在插入时,它不会插入第一条记录,而是插入从控制器末尾传递的记录。但是,只要第一个数据传递给控制器,就会生成一个Id。
我的控制器:
foreach($user_likes['data'] as $ul){
$category_id = $categoriesModel->ifCategoryExists($ul['category']);
if(!$category_id){
$category_id = $categoriesModel->add($ul['category']);
$categories[$category_id] = $ul['category'];
}
}
我的模特:
public function add($params = '') {
$transaction = $this->dbConnection->beginTransaction();
try {
$this->Category = $params;
$this->save();
$transaction->commit();
echo "{ inserted_id ", $this->Id," },{ inserted_category ",$params," }<br/>";
return $this->Id;
} catch (Exception $e) {
$transaction->rollback();
throw $e;
}
}
当我看到echo
的输出时{ inserted_id 17 },{ inserted_category Community }
{ inserted_id 17 },{ inserted_category Local business }
{ inserted_id 17 },{ inserted_category Actor/director }
{ inserted_id 17 },{ inserted_category Event planning/event services }
{ inserted_id 17 },{ inserted_category Album }
{ inserted_id 17 },{ inserted_category Magazine }
{ inserted_id 17 },{ inserted_category Internet/software }
{ inserted_id 17 },{ inserted_category Consulting/business services }
{ inserted_id 17 },{ inserted_category Education website }
{ inserted_id 17 },{ inserted_category Author }
{ inserted_id 17 },{ inserted_category Public figure }
{ inserted_id 17 },{ inserted_category Business person }
{ inserted_id 17 },{ inserted_category Public figure }
{ inserted_id 17 },{ inserted_category Community }
{ inserted_id 17 },{ inserted_category Comedian }
{ inserted_id 17 },{ inserted_category Business person }
{ inserted_id 17 },{ inserted_category Public figure }
{ inserted_id 17 },{ inserted_category News personality }
{ inserted_id 17 },{ inserted_category Political organization }
{ inserted_id 17 },{ inserted_category Computers/technology }
{ inserted_id 17 },{ inserted_category Travel/leisure }
{ inserted_id 17 },{ inserted_category Community }
非常奇怪的是,它正在插入
Community
答案 0 :(得分:2)
CActiveRecord
有一个状态,它以“新”开头(并使用“插入”方案)。只要在其上调用save(),它就不再是新的并转到“更新”方案。 CActiveRecord
不会插入不同的记录,1个实例= 1行。
但是如果你真的想要使用单个实例,只需重置一下:
$this->Id = NULL;
$this->isNewRecord = TRUE;
如果您在$this->save()
之前添加此权限,它应该有效。
我强烈建议按原样使用框架并创建新实例。
答案 1 :(得分:0)
您正在保存相同的模型,反复使用不同的属性(有关详细信息,请参阅CActiveRecord::save()
)。我建议您在保存时使用CategoriesModel
的新实例或将isNewRecord
设置为false并在保存之前取消设置id
。
public function add($params = '') {
$transaction = $this->dbConnection->beginTransaction();
try {
$this->isNewRecord = false;
unset($this->Id);
$this->Category = $params;
$this->save();
$transaction->commit();
echo "{ inserted_id ", $this->Id," },{ inserted_category ",$params," }<br/>";
return $this->Id;
} catch (Exception $e) {
$transaction->rollback();
throw $e;
}
}