防止在yii2中重复batchInsert

时间:2016-09-27 04:01:59

标签: php mysql yii2 batch-insert

$connection->createCommand()->batchInsert('user', ['name', 'age'], [
    [$names, $ages],
])->execute();

我知道我可以使用Yii 2中的上述代码进行批量插入。但是如何使用batchInsert防止重复输入?例如,如果我有一个重复的名称,我不想将其插入数据库

1 个答案:

答案 0 :(得分:0)

两种可能的选择:

1)对数据库表中的name列使用唯一约束。

这样你就可以尝试执行查询并捕获异常:

try {
    // Your query goes here
} catch (\yii\db\Exception) {
    // Handle error
}

\yii\db\Exception是比较常见的数据库操作相关异常,您可以使用更具体的\yii\db\IntegrityException

2)在提供数据和执行查询之前,从PHP中的数组中排除重复项。根据数组的构造方式,您可以这样做:

  • foreach中构建此数组期间,例如通过检查已形成数组中是否已存在具有相同名称的项目,如果是,则向其追加元素,否则 - 跳过。
  • 或之后使用例如array_filter函数。

我建议采用第一种方法,因为即使您决定在PHP中处理重复项,根据数据结构和数据库中的额外保护也不会超级流畅。