Phalcon批量插入数据记录

在开发 酷瓜云课堂(开源知识付费解决方案)的过程中,需要一次插入几千条数据,官方文档里没有相关批量操作的指引,自己动手才能丰衣足食。

Phalocn 默认的 Model 和 PHQL 是不支持批量插入记录的,如果用循环插入几百上千成万的记录,那效率不知道有多低。使用Phalcon底层的 db 操作可以支持原生 SQL,拼装一下 SQL 语句就可以批量插入记录了。

语句拼装函数

/**
 * 批量插入SQL
 *
 * @param string $table
 * @param array $rows
 * @return false|string
 */
function kg_batch_insert_sql($table, $rows = [])
{
    if (count($rows) == 0) return false;

    $fields = implode(',', array_keys($rows[0]));

    $values = [];

    foreach ($rows as $row) {
        $values[] = sprintf('(%s)', implode(',', $row));
    }

    $values = implode(',', $values);

    return sprintf("INSERT INTO %s (%s) VALUES %s", $table, $fields, $values);
}

使用方法案例

$logModel = new QQDeliverLogModel();

$table = $logModel->getSource();

$rows = [];

$createTime = time();

foreach ($groupUsers as $groupUser) {
    $rows[] = [
        'task_id' => $task->id,
        'group_id' => $groupUser->group_id,
        'user_id' => $groupUser->user_id,
        'create_time' => $createTime,
    ];
}

$sql = kg_batch_insert_sql($table, $rows);

try {
    $this->db->begin();
    $this->db->execute($sql);
    $this->db->commit();
} catch (\Exception $e) {
    $this->db->rollback();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值