laravel选择条件和位置条件

问题描述 投票:28回答:6

我有我要执行的基本查询,但是错误不断出现。可能是由于我刚接触Laravel。

这里是代码:

$userRecord = $this->where('email', $email)->where('password', $password);
        echo "first name: " . $userRecord->email;

我正在尝试获取与凭据匹配的用户记录,其中电子邮件和密码是匹配的。这会引发错误:

未定义的属性:Illuminate \ Database \ Eloquent \ Builder :: $ email

我已经检查了传递给该功能的电子邮件和密码,它们正在保存值。这是什么问题?

谢谢,

laravel laravel-4 eloquent
6个回答
34
投票
$this->where('email', $email)->where('password', $password) 

返回一个Builder对象,您可以使用它在过滤器等位置附加更多内容。>

要获得结果,您需要:

$userRecord = $this->where('email', $email)->where('password', $password)->first();

6
投票

阅读完先前的评论后,很明显您误解了Hash :: make函数。 Hash :: make使用bcrypt哈希。按照设计,这意味着每次您运行Hash :: make('password')时,结果都会有所不同(由于随机salting)。这就是为什么您无法仅通过将哈希密码与哈希输入进行对照来验证密码的原因。


4
投票
$userRecord = Model::where([['email','=',$email],['password','=', $password]])->first();

3
投票

错误来自$userRecord->email。从数据库调用时,需要使用->get()->first()方法,否则只会得到Eloquent\Builder对象,而不是Eloquent\Collection


1
投票

您需要使用first()get()来获取结果:


-7
投票

经过严格的测试,我发现问题的根源是Hash :: make('password')。显然,这每次都会生成不同的哈希。所以我用我自己的哈希函数(以前在codeigniter中写过)和中提琴替换了它!一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.