Laravel将2个update查询重写为1个


Laravel rewrite 2 update queries into 1

是否有办法将以下查询重写为1个查询?

$this->template->whereId($id)->update(['default' => true]);
$this->template->whereNotIn('id', $id)->update(['default' => false]);

您可以将它们组合在一个MySQL查询中(如果您正在使用MySQL),如下所示:

UPDATE template_table
     SET default = CASE
        WHEN id = $id THEN 1
        WHEN id <> $id THEN 0
        ELSE default = default
     END

然后你可以使用DB::raw()向数据库发送一个原始查询

DB::statement("
    UPDATE templates
    SET default = 
        CASE
            WHEN id = ? THEN 1
            ELSE 0
        END
", [$id]);

没有其他(雄辩的)方法