【问题标题】:Laravel Raw DB Insert Affected RowsLaravel Raw DB 插入受影响的行
【发布时间】:2015-10-06 15:06:26
【问题描述】:

我在 laravel 4 中使用原始查询有没有办法检查插入时受影响的行? DB::getPdo()->rowCount(); 给了我一个 "undefined method" error。代码如下:

$query = "INSERT IGNORE INTO table (id) VALUES (?)";
$doQuery = DB::insert($query, array($value));
if ($doQuery) {
    return DB::getPdo()->last();
} else {
    return 0;
}

如果没有,是否有一种简单的方法可以在不进行两次查询的情况下确定插入是否完成?

【问题讨论】:

    标签: php mysql pdo laravel-4


    【解决方案1】:

    你可以使用这个功能:

    int affectingStatement(字符串 $query, array $bindings = array())

    运行 SQL 语句并获取受影响的行数。

    参数

    • 字符串$查询
    • 数组 $bindings

    返回值

    • int

    这个函数已经记录在 laravel 4.2 和 5.4 中。 [编辑说明:这些版本的文档已从 laravel 站点中删除。]

    注意insert()statement() 的别名,将返回一个布尔值。而函数update()delete()affectingStatement() 的别名。因此,如果您想变得有趣并迷惑评论者,您也可以写 $rowCount = DB::delete("INSERT IGNORE ...", $bindings) - 它会起作用。

    【讨论】:

    • 5.4 链接也坏了 - 我都删除了。 8.x API 可以找到here
    【解决方案2】:

    我想出了一个同样有效的解决方法 - 使用 INSERT INTO 而不是 INSERT IGNORE INTO 并使用 try/catch。

       $query = "INSERT INTO table (id) VALUES (?)";
        try {
            DB::insert($query, array($value));
            return 1;
        } catch (\Exception $e) {
            return 0;
        }
    

    【讨论】:

    • 不错的解决方案,期待看看有没有这方面的进展
    猜你喜欢
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多