我有我要执行的基本查询,但是错误不断出现。可能是由于我刚接触Laravel。
这里是代码:
$userRecord = $this->where('email', $email)->where('password', $password);
echo "first name: " . $userRecord->email;
我正在尝试获取与凭据匹配的用户记录,其中电子邮件和密码是匹配的。这会引发错误:
未定义的属性:Illuminate \ Database \ Eloquent \ Builder :: $ email
我已经检查了传递给该功能的电子邮件和密码,它们正在保存值。这是什么问题?
谢谢,
$this->where('email', $email)->where('password', $password)
返回一个Builder对象,您可以使用它在过滤器等位置附加更多内容。>
要获得结果,您需要:
$userRecord = $this->where('email', $email)->where('password', $password)->first();
阅读完先前的评论后,很明显您误解了Hash :: make函数。 Hash :: make使用bcrypt哈希。按照设计,这意味着每次您运行Hash :: make('password')时,结果都会有所不同(由于随机salting)。这就是为什么您无法仅通过将哈希密码与哈希输入进行对照来验证密码的原因。
$userRecord = Model::where([['email','=',$email],['password','=', $password]])->first();
错误来自$userRecord->email
。从数据库调用时,需要使用->get()
或->first()
方法,否则只会得到Eloquent\Builder
对象,而不是Eloquent\Collection
您需要使用first()
或get()
来获取结果:
经过严格的测试,我发现问题的根源是Hash :: make('password')。显然,这每次都会生成不同的哈希。所以我用我自己的哈希函数(以前在codeigniter中写过)和中提琴替换了它!一切正常。