猿问

在模型上调用 save() 将更新数据库中的每一行

我在迁移文件中有以下功能。迁移是添加一个新列,然后更新现有条目的列:


<?php


private function updatePlans()

{

    $plans = PlanProvider::query()->get();


    foreach ($plans as $plan) {

        $plan->num_adults = 1;


        if (stripos($plan->rate_name, 'couple') !== false) {

            $plan->num_adults = 2;

        }

        $plan->save();

    }

}

现在,这里发生的是,当我调用 时save(),它会更新每个模型,而不是循环内的模型。我对另一个迁移有类似的功能,它按预期工作。为什么这会更新每个模型而不仅仅是一个模型?


蝴蝶刀刀
浏览 92回答 3
3回答

慕沐林林

$plans是一个包含您所有“计划”的集合。你$plan->save();超出了你的if条件,所以很明显它会更新每一行,不管它是 1 还是 2num_adults

心有法竹

你可以试试这个<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class PlanProvider extends Model{&nbsp; &nbsp; protected $table = 'plan_provider';&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; protected $guarded = [];&nbsp; &nbsp; public $timestamps = false;}private function updatePlans(){&nbsp; &nbsp; $plans = PlanProvider::findOrFail(id);&nbsp; &nbsp; $plans->num_adults = 1;&nbsp; &nbsp; $plans->save();&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return redirect()->back();&nbsp;&nbsp;}

饮歌长啸

public function store(Request $request)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $this->validate($request,[&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'email' => 'required|email|unique:subscribers'&nbsp; &nbsp; &nbsp; &nbsp; ]);&nbsp; &nbsp; &nbsp; &nbsp; $subscriber = new Subscriber();&nbsp; &nbsp; &nbsp; &nbsp; $subscriber->email = $request->email;&nbsp; &nbsp; &nbsp; &nbsp; $subscriber->save();&nbsp; &nbsp; &nbsp; &nbsp; Toastr::success('You are Successfully Added Our Subscriber List:)','Success');&nbsp; &nbsp; &nbsp; &nbsp; return redirect()->back();&nbsp; &nbsp;}
随时随地看视频慕课网APP
我要回答