如何使用Laravel的Eloquent/Fluent将每一行设置为相同的值?

rkue9o1l  于 2022-12-14  发布在  其他
关注(0)|答案(9)|浏览(126)

我需要更新数据库中的所有行,以便所有行中的某个特定字段等于一个值。
假设我的数据库表是这样的:
| 标识符|资料|确认的|
| - -|- -|- -|
| 一个|某些数据|第0页|
| 2个|某些数据|一个|
| 三个|某些数据|第0页|
我想执行一个查询,将每一行的确认字段设置为1。
我可以这样做:

$rows = MyModel::where('confirmed', '=', '0')->get();
foreach($rows as $row) {
    $row->confirmed = 0;
    $row->save();
}

但似乎还有更好的方法?一个查询,只需要“将每行的”确认“字段设置为1”。
Laravel的Eloquent/Fluent中是否存在这样的疑问?

eqoofvh9

eqoofvh91#

为了保持这个线程是最新的,您可以直接使用以下命令更新Eloquent模型的所有行:

Model::query()->update(['confirmed' => 1]);

如果使用WHERE之类的语句

Model::where('foo', '=', 'bar')->update(['confirmed' => 1])

如果要同时包含软删除的行

Model::query()->withTrashed()->update(['confirmed' => 1]);
ccgok5k5

ccgok5k52#

答案很简单:一个模型代表数据库中的一行,如果他们实现了这一点,那就没有意义了。
但是,有一种方法可以做到这一点与流利:

$affected = DB::table('table')->update(array('confirmed' => 1));

甚至更好

$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1));
5tmbdcev

5tmbdcev3#

您可以使用elquent(laravel 4)来实现此目的:

MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1])
66bbxpm5

66bbxpm54#

这对我很有效:

MyModel::query()->update(  ['confirmed' => 1] );
2nc8po8w

2nc8po8w5#

更新所有行的解决方案:
1.创建一个额外的列(如'updateAll')并为mysql表中的所有行分配静态值(如'updateAll' = '1')。
1.添加名称为“forUpdateAll”且值为“forUpdateAllValue”的隐藏输入字段(仅执行特定代码以更新所有行)
1.然后为update(Request $request,$id)方法添加以下代码:

public function update(Request $request, $id){
      if($request->get('forUpdateAll') == "forUpdateAllValue"){
                 $question = \App\YourModel::where('updateAll',$id)
                     ->update([
                         'confirmed' => 1
                     ]);

      }else {
          //other code ( update for unique record ) 
      }
 }

1.按如下方式设置窗体:

<form role="form" action="/examples/1" method="post">        
      {{ method_field('PATCH') }}
      {{ csrf_field()}}
      <input type="hidden" name="forUpdateAll" value="forUpdateAllValue">  
      <button type="submit" class="btn btn-primary">Submit</button>
  </form>
ktca8awb

ktca8awb6#

模型::where('已确认',0)-〉更新(['已确认' =〉1])

ql3eal8s

ql3eal8s7#

更新任何列字段

DB::table('your_table_name')->update(['any_column_name' => 'any value']);
ac1kyiln

ac1kyiln8#

使用laravel proficent更新所有字段:

方式-〉1
[状态-〉要更新的列]

Model::where('status', '=', 1)->update(['status' => 0]);

方式-〉2
[状态-〉要更新的列]

$allData = Model::where('status', 1)->get();
                foreach ($allData as $data){
                    $data->status= 0;
                    $data->update();
                }
zkure5ic

zkure5ic9#

您可以执行此操作以更新所有记录。
应用程序\用户::where('id','like',' %')-〉更新(['已确认' =〉'字符串']);

相关问题