从 ModelNotFoundException 中获取丢失的对象

Get the missing objects from a ModelNotFoundException

考虑以下情况:

User::findOrFail([1,2,5,6]);

假设 id = 5id = 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
}