从ModelNotFoundException获取缺少的对象

时间:2015-03-01 17:48:17

标签: php laravel eloquent laravel-5

考虑以下情况:

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

我们假设数据库中不存在id = 5id = 6的用户。因此,将抛出 ModelNotFoundException异常

有没有办法知道哪些是缺少的用户? 我想知道数据库中不存在的唯一用户是5和6。

谢谢!

1 个答案:

答案 0 :(得分:1)

无法确定使用findOrFail找不到哪些,因为该方法只是将从数据库返回的项目数与您作为参数传递的ID数量进行比较(它不关心哪些是未找到的ID)。当它抛出异常时,它只传递模型类名称而已:

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
}