如果在laravel雄辩的情况下完成循环中的创建或更新,如何返回true或false?

时间:2018-09-18 07:37:28

标签: laravel laravel-5 eloquent laravel-5.6

我的脚本如下:

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 :(得分:2)

如果Eloquent将更改保存到数据库时发生错误,则将引发异常。您只需用 try / catch 包装代码,并在引发异常时返回false。

public function synch($apiItems)
{
  try {

    // your code goes here

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

注意:在循环中进行多次更新时,请确保整个过程作为单个数据库事务的一部分进行,以免最终获得的数据不完整。部分更新。一个示例是创建了某些项目,但随后发生错误,其余项目被跳过。

答案 1 :(得分:1)

在代码中添加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;
    }
}