我想检查数据是否已被删除。所以我使用雄辩如:
$check = ModelName::withTrashed()->where("id","=",$id)
->select("id","deleted_at","other_field")
->get();
foreach ($check as $rw) {
echo $rw->id; // it print the id
echo $rw->other_field; //also print the field value
echo $rw->deleted_at; // Error:
//InvalidArgumentException in Carbon.php line 425:
//Data missing
//at Carbon::createFromFormat('Y-m-d H:i:s.000', '2016-09-19 07:06:56') in Model.php line 2955
}
然后我尝试转储以查看值:
dd($check);
deleted_at的结果回显它的值如下:
#attributes: array:3 [▼
"id" => 1
"deleted_at" => "2016-09-19 07:06:56"
答案 0 :(得分:1)
编辑:
在错误消息中,Carbon使用的日期格式似乎有点偏。尝试手动在模型中指定它:
protected $dateFormat = 'Y-m-d H:i:s';
我将离开答案的第一部分,因为这也可能有助于通过搜索偶然发现此主题的人。
dd()在第一个值之后停止,在您的情况下被软删除,因此您只需在错误之前停止执行。如果删除dd,循环将继续,直到它中断。因此,如果您想检查错误之前的所有数据,请使用print_r而不是dd(),这样输出就不会停止脚本。
现在关于你的例外。问题是当Carbon鼓励一个NULL字段时 - 一个未被删除的记录。它试图将null解析为日期并且显然失败。
您的方法应该更改 - 您可以在尝试访问记录之前检查记录是否已被删除:deleted_at时间戳:
$check = ModelName::withTrashed()->where("id","=",$id)
->select("id","deleted_at","other_field")
->get();
foreach ($check as $rw) {
echo $rw->id; // it print the id
echo $rw->other_field; //also print the field value
if ($rw->trashed())
echo $rw->deleted_at;
}
另一个不那么优雅的解决方案是从模型中的$ dates数组中删除deleted_at并停止自动解析。然后,您将在模型中编写自定义访问器:
public function getDeletedAtAttribute($value)
{
return $value ? Carbon::createFromFormat('Y-m-d H:i:s', $value) : NULL;
}
我会推荐第一种方法。