79

データベース内のすべての行を更新して、すべての行の特定のフィールドが単一の値と等しくなるようにする必要があります。これが例です。

私のデータベーステーブルが次のようになっているとしましょう。

id データ 確認済み
1 someData 0
2 someData 1
3 someData 0

すべての行の確認済みフィールドを1に設定するクエリを実行したいと思います。

私はこのようにそれを行うことができます:

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

しかし、もっと良い方法があるように思われますか?「すべての行の「確認済み」フィールドを1に設定する」という単一のクエリ。

そのようなクエリはLaravelのEloquent/Fluentに存在しますか?

4

8 に答える 8

144

このスレッドを最新の状態に保つために、次を使用してEloquentモデルに対してすべての行を直接更新できます。

Model::query()->update(['confirmed' => 1]);
于 2016-09-14T15:11:15.997 に答える
97

まあ、簡単な答え:いいえ、雄弁ではありません。モデルはデータベース内の1行を表しますが、これを実装しても意味がありません。

ただし、流暢にこれを行う方法があります。

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

またはさらに良い

$affected = DB::table('table')->where('confirmed', '=', 0)->update(array('confirmed' => 1));
于 2013-03-26T13:24:20.973 に答える
24

あなたはelquent(laravel 4)でこれを行うことができます:

MyModel::where('confirmed', '=', 0)->update(['confirmed' => 1])
于 2015-03-24T08:51:34.283 に答える
1

すべての行を更新するためのソリューション:

  1. 追加の列(「updateAll」など)を作成し、mysqlテーブルのすべての行(この「updateAll」=「1」など)に静的な値を割り当てます。

  2. name="forUpdateAll"およびvalue="forUpdateAllValue"の非表示の入力フィールドを追加します(すべての行を更新するための特定のコードのみを実行するため)

  3. 次に、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>
于 2020-06-07T05:07:50.613 に答える
1

列フィールドを更新します

DB::table('your_table_name')->update(['any_column_name' => 'any value']);
于 2021-12-20T17:25:23.517 に答える
0

Model :: where('confirmed'、0)-> update(['confirmed' => 1])

于 2021-10-14T09:13:15.390 に答える
0

これは私のために働いています:

   MyModel::query()->update(  ['confirmed' => 1] );
于 2021-12-29T08:47:09.407 に答える
-8

これを実行して、すべてのレコードを更新できます。

App \ User :: where('id'、'like'、'%')-> update(['confirmed' =>'string']);

于 2018-06-12T06:19:28.193 に答える