【发布时间】:2021-12-03 03:48:13
【问题描述】:
假设我们有一个数据库,其中有一张名为fathers 的表;以及另一个名为 children 的表。
我想要所有父亲是妈妈的孩子。
$pls = children::where(['father_id' => 5, 'isGoodBoy' => true])->take(4)->get();
我想更改 $pls 并将father_id 设置为7,8,50,55。所以可以在foreach中一一请求:
for ($i = 0; $i < count($pls); $i++) {
$pls[$i] = $arayWhoWantBaby[$i];
$pls[$i]->save();
}
这项工作,但有很多请求......(在这个例子中,1 个获取请求和 4 个更新请求!)
我想通过一个或两个 DB 请求执行此操作,一个从 DB 获取数据,另一个设置新数据,一个请求完成所有工作并更新项目 $pls[0][1][2]...
一件事是 sql 中的“in”关键字用于更新;
【问题讨论】:
-
由于您尝试使用不同的值更新四个结果中的每一个,因此没有漂亮的方法可以做到这一点。即使使用原始 sql,也意味着在更新查询中使用
case when -
哇,我认为这个 grate 解决方案是在 laravel 中安全地执行原始 sql 的方法吗?
-
好的,绑定输入。
-
我听人说这种方法不是很安全。无论如何,我不喜欢 orms 作为 elquent 或教义。绑定真的安全吗?
-
应该是。这就是重点。转义任何恶意输入以防止 sql 注入。我仍然建议你使用 ORM。
标签: php mysql laravel database eloquent