0

我目前正在开发一个 PHP (laravel) 项目,我们正在使用 MongoDB(jenssegers 包)。我在以下结构上进行了密码重置:

{
    "_id" : ObjectId("58d56135b462e816642abbd1"),
    "email" : "wesley@foo.bar",
    "updated_at" : ISODate("2017-03-26T20:46:14.074Z"),
    "created_at" : ISODate("2017-03-24T18:11:01.040Z"),
    "passwordReset" : [ 
        {
            "token" : "59b4b694e9ddcd9b44b0374eac595b28",
            "updated_at" : ISODate("2017-03-24T18:11:05.017Z"),
            "created_at" : ISODate("2017-03-24T18:11:05.017Z"),
            "_id" : ObjectId("58d56139b462e816642abbd4")
        }
    ]
}

但是,多个用户可以有多个passwordReset's。因此,当我想搜索令牌时,我希望能够搜索所有重置而不是这样做:

    $users = User::all();
    $activeReset = null;
    foreach ($users as $user) {
        if (! is_null($user->passwordReset)) {
            foreach ($user->passwordReset as $reset) {
                if ($reset->token == $this->route('token')) {
                    $activeReset = $reset;
                }
            }
        }
    }

这是一个可行的解决方案,但它不是最漂亮的,而且,当应用程序投入生产时,这将导致巨大的加载时间,这不是我想要的。

PasswordReset::all();但是,只是通过导致一个空数组进行所有重置。

那么,有没有办法在不经过所有用户的情况下做到这一点?通过Laravel它本身还是通过“原始”PHP?

谢谢。

4

1 回答 1

1

如果您使用EmbedsMany关系,您可以获得至少具有 1 个匹配令牌的所有用户:

User::where('passwordReset', 'elemMatch', array('token' => $this->route('token')));
于 2017-03-27T08:25:33.687 回答