【发布时间】:2015-09-12 13:25:26
【问题描述】:
有没有办法将以下查询重写为 1 个查询?
$this->template->whereId($id)->update(['default' => true]);
$this->template->whereNotIn('id', $id)->update(['default' => false]);
提前致谢。
【问题讨论】:
-
仅 DB::raw。你可以接受吗?
有没有办法将以下查询重写为 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() 向数据库发送原始查询。
【讨论】:
ELSE default 应该是。并且不需要 ELSE
DB::statement("
UPDATE templates
SET default =
CASE
WHEN id = ? THEN 1
ELSE 0
END
", [$id]);
没有其他(雄辩的)方式
【讨论】: