Как я могу вернуть true или false, если создание или обновление в цикле завершено на laravel eloquent? - PullRequest
0 голосов
/ 18 сентября 2018

Мой скрипт такой:

public function synch($apiItems)
{
    $itemsLocal = $this->item->get();
    foreach ($apiItems as $key) {
        $check = $itemsLocal->filter(function ($item) use ($key) {
            return $item->code == $key->Code;
        });
        if ($check->count() < 1) {
            $this->item->create([
                'code' => $key->Code,
                'description' => $key->Description,
                'attribute_code' => $key->Attribute_Code,                
                'flag' => $key->Flag
            ]);
        } 
        else {
            if($key->Flag === false) {
                $this->item->where(['code' => $check->first()->code])->update([
                    'description' => $key->Description,
                    'attribute_code' => $key->Attribute_Code,
                    'flag' => $key->Flag
                ]);
            }
        }
    }
}

Я хочу, чтобы после завершения процесса создания или обновления он вернул значение true. и если он потерпит неудачу, он вернет false

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Если при сохранении изменений в базе данных Eloquent возникает ошибка, возникает исключение.Вы можете просто обернуть свой код с помощью try / catch и вернуть false, когда возникло исключение.

public function synch($apiItems)
{
  try {

    // your code goes here

    return true;
  } catch (Exception $e) {
    return false;
  }
}

Примечание: Поскольку вы выполняете несколько обновлений в пределахЦикл, убедитесь, что весь процесс происходит как часть одной транзакции базы данных, чтобы вы не получили данные, которые были частично обновлены.Примером может служить случай, когда некоторые элементы были созданы, но затем произошла ошибка, а остальные были пропущены.

0 голосов
/ 18 сентября 2018

Добавьте try catch в ваш код. Изменение, такое как:

public function synch($apiItems)
{
    try{
        $itemsLocal = $this->item->get();
        foreach ($apiItems as $key) {
            $check = $itemsLocal->filter(function ($item) use ($key) {
                return $item->code == $key->Code;
            });
            if ($check->count() < 1) {
                $this->item->create([
                    'code' => $key->Code,
                    'description' => $key->Description,
                    'attribute_code' => $key->Attribute_Code,                
                    'flag' => $key->Flag
                ]);
            } 
            else {
                if($key->Flag === false) {
                    $this->item->where(['code' => $check->first()->code])->update([
                        'description' => $key->Description,
                        'attribute_code' => $key->Attribute_Code,
                        'flag' => $key->Flag
                    ]);
                }
            }
        }

        return true;
    } catch (Exception $e) {
        return false;
    }
}
...