Laravel使用其他模型验证其他条件

时间:2016-05-23 19:30:12

标签: php laravel laravel-5.2

使用Laravel的5.2身份验证,文档显示我可以为身份验证查询添加更多条件,如下所示:

指定其他条件

如果您愿意,除了用户的电子邮件和密码之外,您还可以为身份验证查询添加额外条件。例如,我们可能会验证用户是否已标记为"有效":

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    // The user is active, not suspended, and exists.
}

就我而言,我想设定一个生活在另一个多对多的雄辩模型中的条件:

class Account extends Model
{
    public function users() {
        return $this->belongsToMany('App\User', 'account_users');
    }
}
class User extends Model implements AuthenticatableContract
{
    public function accounts() {
        return $this->belongsToMany('App\Account', 'account_users');
    }
}

有一个帐户id通过中间件传递,我可以这样访问:

$request->account

如何在引用相关模型时实施新条件?我只是不知道如何利用ORM关系。任何指向正确方向的帮助都非常感谢!

1 个答案:

答案 0 :(得分:0)

如果你想利用Eloquent的关系,你很可能需要在'if'控制结构中添加另一个条件。在你的Auth :: attempt()完成之前 - 没有Auth :: user()对象,你需要ORM的那个对象。

因此,您可以执行以下操作:

if (Auth::attempt(['email' => $email, 'password' => $password])) {
    // Your extra conditions for accounts, just a couple of examples
    if (count(Auth::user()->accounts) == 0) Auth::logout();
    if (! Auth::user()->accounts()->active()->get()) Auth::logout();
}