Вызов save () для модели обновит каждую строку в базе данных - PullRequest
0 голосов
/ 15 января 2020

У меня есть следующая функция в файле миграции. Миграция заключается в добавлении нового столбца, а затем обновлении столбцов существующих записей:

<?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(), он обновляет КАЖДУЮ модель, а не один внутри л oop. У меня есть аналогичная функция для другой миграции, и она работает как положено. Почему это обновляет каждую модель, а не только одну?

Ответы [ 3 ]

0 голосов
/ 15 января 2020
 public function store(Request $request)
    {


        $this->validate($request,[
            'email' => 'required|email|unique:subscribers'
        ]);

        $subscriber = new Subscriber();
        $subscriber->email = $request->email;
        $subscriber->save();
        Toastr::success('You are Successfully Added Our Subscriber List:)','Success');
        return redirect()->back();

   }
0 голосов
/ 15 января 2020

Вы можете попробовать это

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class PlanProvider extends Model
{

    protected $table = 'plan_provider';

    protected $guarded = [];
    public $timestamps = false;
}


private function updatePlans()
{
    $plans = PlanProvider::findOrFail(id);
    $plans->num_adults = 1;
    $plans->save();

    return redirect()->back();  
}
0 голосов
/ 15 января 2020

$plans - это коллекция, которая содержит все ваши "планы". Ваш $plan->save(); находится за пределами ваших if условий, поэтому, очевидно, он обновляет каждую строку, независимо от того, имеет ли она 1 или 2 num_adults

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...