从 ModelNotFoundException 中获取丢失的对象
Get the missing objects from a ModelNotFoundException
考虑以下情况:
User::findOrFail([1,2,5,6]);
假设 id = 5
和 id = 6
的用户在数据库中不存在。因此,将抛出 ModelNotFoundException 异常。
有没有办法知道哪些是缺失的用户?
我想知道数据库中不存在的唯一用户是 5 和 6。
谢谢!
无法使用 findOrFail
确定哪些未找到,因为该方法只是将从数据库返回的项目数与您作为参数传递的 ID 数进行比较(它不关心这是未找到的 ID)。当它抛出异常时,它只传递模型 class 名称,仅此而已:
throw (new ModelNotFoundException)->setModel(get_class($this->model));
如果需要,您需要自己实现逻辑。这是一个方法:
$ids = [1, 2, 5, 6];
// Find the users
$users = User::find($ids)->get();
// Find the IDs that did not match
$notFoundIds = array_diff($ids, $users->modelKeys('id'));
if ( ! empty($notFoundIds))
{
// throw your exception here
// the missing IDs are in $notFoundIds
}
考虑以下情况:
User::findOrFail([1,2,5,6]);
假设 id = 5
和 id = 6
的用户在数据库中不存在。因此,将抛出 ModelNotFoundException 异常。
有没有办法知道哪些是缺失的用户? 我想知道数据库中不存在的唯一用户是 5 和 6。
谢谢!
无法使用 findOrFail
确定哪些未找到,因为该方法只是将从数据库返回的项目数与您作为参数传递的 ID 数进行比较(它不关心这是未找到的 ID)。当它抛出异常时,它只传递模型 class 名称,仅此而已:
throw (new ModelNotFoundException)->setModel(get_class($this->model));
如果需要,您需要自己实现逻辑。这是一个方法:
$ids = [1, 2, 5, 6];
// Find the users
$users = User::find($ids)->get();
// Find the IDs that did not match
$notFoundIds = array_diff($ids, $users->modelKeys('id'));
if ( ! empty($notFoundIds))
{
// throw your exception here
// the missing IDs are in $notFoundIds
}