我的脚本如下:
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
我该怎么办?
答案 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;
}
}