【问题标题】:Use other column values for Eloquent update使用其他列值进行 Eloquent 更新
【发布时间】:2015-09-16 01:20:37
【问题描述】:

我想使用 Eloquent 执行 UPDATE,它将使用同一表的 column_acolumn_b 的值设置 column_c 值。基本上是这样的:

User::where('id', '>', 0)
        ->update(['column_c' => $this->column_a + $this->column_b]);

其中$this->column_a$this->column_b 将是当前行的实际值。

MySQL 等效项:

UPDATE `user` WHERE id > 0 SET column_c = column_a + column_b;

注意:上面的代码只是展示这个想法的一个例子。这不是实际的实现(这会造成数据库冗余)。

如何在 Laravel 5.1 中执行此类更新?我真的很想避免foreach

【问题讨论】:

    标签: php laravel eloquent laravel-5


    【解决方案1】:

    也许DB::raw 可以提供帮助。这将允许您使用任何标准的 sql 查询来组合您的数据:

    User::where('id', '>', 1)
        ->update(['column_c' => DB::raw( CONCAT(column_a, '-', column_b) )]);
    

    【讨论】:

    • 当然,我知道DB::raw(),它很方便,但我发现它是高级查询的“解决方法”,很难用 Eloquent 或 Query Builder 构建。令人失望的是,在 MySQL 中很容易完成的事情(如我的帖子中所示)在 Laravel 中是开箱即用的。无论如何,谢谢:)
    • 但我想只有 Eloquent 才有办法先查询数据。正如你所说,DB::raw() 是用于高级查询的东西,我认为这已经是高级的了,因为 laravel 中没有像 concat 这样的功能。
    • 是的,你可能是对的。我想我会坚持到底。​​span>
    【解决方案2】:

    例子:

    User::where('id', '>', 0)
        ->update(['column_c' => DB::raw('`column_a` + `column_b`']);
    

    【讨论】:

    • 多一点解释,不仅代码本身会很好。 ;-)
    • 我没有看到与接受的答案有重大区别,您将 id 从 1 更改为 0 并将 concat 替换为 + 但这似乎并没有使它成为我的不同解决方案。
    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2014-07-11
    • 2021-09-19
    相关资源
    最近更新 更多