找回密码
 立即注册
相关推荐换一批
  1. OnePlus 6原厂ROM固件系统升级包下载_OnePlus 6刷机教程
  2. 三星S10e Android 10升级固件ROM刷机包免费下载_附升级教程_CHC-G9700ZCU2BSL7
  3. OPPO Reno2刷机包下载_oppoReno2系统升级_系统更新_系统刷机教程
  4. oppo K5(PCNM00)原厂卡刷升级包
  5. 努比亚V18努比亚NX612J原厂固件卡刷包下载_刷机ROM固件包下载
  6. oppo A7 (PBFT00)卡刷升级固件包免费下载
  7. Vivo Nex的官方固件卡刷包免费下载
  8. 天敏D6U纯净版破解固件刷第三方固件rom系统刷机包
  9. wordpress主题 阿里百秀 v7.7版本
  10. 原创织梦仿QQ技术基地源码
  11. DEDE织梦CMS微科资源网模板小刀娱乐网同款风格
  12. 易语言模块 软件更新.ec
  13. 易语言模块 自动更新.ec
  14. 易语言模块 单文件自动更新.ec
  15. 最新织梦cms精仿版资源网模板源码
  16. 精仿QQ技术基地资源网织梦cms模板源码
  17. JT/T 1218.2-2018 城市轨道交通运营设备维修与更新技术规范第2部分:车辆
  18. JT/T 1218.3-2018 城市轨道交通运营设备维修与更新技术规范第3部分:信号
  19. JT/T 1219-2018 跨座式单轨车辆维护与更新技术规范
  20. JT/T 1220-2018 跨座式单轨道岔设备维护与更新技术规范
  21. JT/T 1218.1-2018 城市轨道交通运营设备维修与更新技术规范第1部分:总则
  22. JT/T 1221-2018 跨座式单轨轨道梁桥维护与更新技术规范
  23. NB/Z 20250-2013 核电厂安全重要仪表和控制系统的更新改造决策指南
  24. YD/T 1368.2-2015 代替 YD/T 1368.2-2008 2GHz TD-SCDMA 数字蜂窝移动通信网终端设?
这样更新Userusers | 软件设计/软件工程 2022-05-03 324 0star收藏 版权: . 保留作者信息 . 禁止商业使用 . 禁止修改作品
问题
如果我错了,请纠正我,但我认为雄辩的模型中不存在大规模更新。

有没有一种方法可以对数据库表进行大规模更新,而不必为每一行发出查询?

比如有没有静态方法
  1. User::updateWhere(
  2.     array('age', '<', '18'),
  3.     array(
  4.         'under_18' => 1
  5.         [, ...]
  6.     )
  7. );
复制代码

(是的,这是一个愚蠢的例子,但你明白了......)

为什么没有实现这样的功能?

如果发生这样的事情,只有我会高兴吗?

我(开发人员)不想像这样实现它:

DB::table(&amp;#39;users&amp;#39;)->where(&amp;#39;age&amp;#39;, &amp;#39;<&amp;#39;, &amp;#39;18&amp;#39;)-&amp;gt ;update(array(&amp;#39;under_18&amp;#39;=>1));

因为随着项目的发展,以后我们可能需要程序员更改表名,而他们无法搜索和替换表名!

有没有这样的静态方法来做到这一点?如果没有,我们可以扩展 Illuminate\Database\Eloquent\Model 类来完成这样的任务吗?

回答
对于批量更新/插入功能,它被要求,但 Taylor Otwell(Laravel 作者)建议用户应该使用 Query Builder。 https://github.com/laravel/framework/issues/1295

您的模型通常应该扩展 Illuminate\Database\elloquent\Model。然后访问实体本身,例如,如果您有:
  1. <?php
  2. Use Illuminate\Database\Eloquent\Model;

  3. class User extends Model {

  4.     // table name defaults to "users" anyway, so this definition is only for
  5.     // demonstration on how you can set a custom one
  6.     protected $table = 'users';
  7.     // ... code omited ...
复制代码

更新#2

您必须求助于查询生成器。为了解决表命名问题,可以通过get table()方法动态获取。唯一的限制是在使用此函数之前需要初始化用户类。您的问题如下:
  1. $userTable = (new User())->getTable();
  2. DB::table($userTable)->where('age', '<', 18)->update(array('under_18' => 1));
复制代码

这样,您的表名就是用户模型中的控制器(如上例所示)。

更新#1

另一种方法(在您的情况下效率不高)是:
  1. $users = User::where('age', '<', 18)->get();
  2. foreach ($users as $user) {
  3.     $user->field = value;
  4.     $user->save();
  5. }
复制代码

这样,表名保存在 users 类中,开发人员不必担心。





上一篇:Visual Studio Online - 无法解析版本描述符 BranchName
下一篇:如何在recyclerview中从Firebase数据库自下而上检索数据