【发布时间】:2019-01-22 17:16:06
【问题描述】:
(使用 Laravel) 我已经在我的表中保存了行。更新时,如果我取消选中复选框,则该值必须重置为默认值。所以我的复选框只接收选中的值,我从数据库中获取所有行并首先将它们设置为默认值,然后我只为选中的行设置所需的值。这是在 2 行代码中完成的,
\DB::table('tablename')->where('val', '=', $id)->update(['val' => 0]);
\DB::table('tablename')->whereIn('id', $request->checked)->update(['val' => $id]);
这是一种方法,但对我来说,当我只需要设置默认值时,将所有行设置为默认值是很糟糕的。另一种选择是使用 foreach,我不喜欢在控制器中使用它。所以问题 1(理论和重要) - 哪个需要更多资源 - 巨大的 sql 或 foreach? Q2(实用)- 考虑到它的 Laravel,你将如何解决这个问题
【问题讨论】:
-
我怀疑 foreach 的性能会更好,即使您将它包装在单个事务中,您也将执行 n+1 个查询而不是 2 个。
-
你想要 where 和 whereIn 的区别吗?
-
我认为
where('id', '=', $id)应该是where('val', '=', $id)在您查看此内容后的第一个查询中。
标签: sql laravel foreach resources