【发布时间】:2015-01-30 15:44:43
【问题描述】:
我对 Yii2 比较陌生,到目前为止我非常喜欢它。 然而,我发现一个与数据库插入相关的问题,更具体地说是 MySQL。
问题很简单:我正在向表中插入值,并且需要检查重复项,所以我的想法是使用 INSERT IGNORE 或 ON DUPLICATE KEY UPDATE强>.
这是我用于插入的代码:
$db->createCommand()
->insert('sdg_fb_apps', [
'fb_id' => $app->id,
'page_id' => $page_id,
'name' => $app->name,
'app_id' => $app_id,
'app_name' => $app_name,
])
->execute();
我必须唯一的键:id 和 app_id,如果我运行这段代码,我显然会被 Yii 抛出一个异常。
有这个扩展,但据我了解仅适用于 Yii 1.0:http://www.yiiframework.com/extension/rdbcommand
我还在GitHub 上发现了这个代码 sn-p,看起来像这样:
class MyQueryBuilder extends yii\db\mysql\QueryBuilder
{
public function batchInsert($table, $columns, $rows)
{
$sql = parent::batchInsert($table, $columns, $rows);
$sql .= 'ON DUPLICATE KEY UPDATE';
return $sql;
}
}
我不明白如何扩展 Querybuilder,可以通过组件吗?
我通过查询来查看 app_id 之前是否已经在数据库中,然后仅在它们不存在时才插入,从而实现了我正在寻找的东西,但是这应该必须扩展到巨大的数字和这种方法可能不是最好的。
任何指导将不胜感激,在此先感谢。
【问题讨论】: