Php Laravel雄辩的一对一目标作为属性而不是功能
我在这里设置了laravel文档中解释的Php Laravel雄辩的一对一目标作为属性而不是功能,php,laravel,eloquent,Php,Laravel,Eloquent,我在这里设置了laravel文档中解释的用户-电话关系: 这工作正常,并显示了数据库中的电话数据 我不明白的是为什么我用$user->phone而不是$user->phone() 从文档中,我的用户模型包含以下功能: public function phone() { return $this->hasOne('App\Phone'); } 但是当我尝试访问$user->phone()->toArray()时,它会抛出一个错误,即找不到该方法 为什么我要访问手机作为属性而不是功
用户
-电话
关系:
这工作正常,并显示了数据库中的电话数据
我不明白的是为什么我用$user->phone
而不是$user->phone()
从文档中,我的用户模型包含以下功能:
public function phone()
{
return $this->hasOne('App\Phone');
}
但是当我尝试访问$user->phone()->toArray()
时,它会抛出一个错误,即找不到该方法
为什么我要访问
手机
作为属性而不是功能?是否可以改用该函数?My IDE无法识别$user的phone
属性,只能识别phone()
函数。由于您的phone函数用于建立关系,因此必须将其作为属性调用。您可能错过了文档中的下一行
一旦定义了关系,我们就可以检索相关记录
使用Eloquent的动态特性。动态属性允许您
访问关系方法,就像它们是在
模型
当您将其称为属性时,laravel理解这是与其他表的关系,并相应地执行它。由于所有关系也充当查询生成器,因此在调用$user->phone()->toArray()时,将返回查询生成器对象并在该类上搜索toArray()函数。由于phone函数用于关系,因此必须将其作为属性调用。您可能错过了文档中的下一行 一旦定义了关系,我们就可以检索相关记录 使用Eloquent的动态特性。动态属性允许您 访问关系方法,就像它们是在 模型
当您将其称为属性时,laravel理解这是与其他表的关系,并相应地执行它。由于所有关系也充当查询生成器,因此在调用$user->phone()->toArray()时,将返回查询生成器对象并在该类上搜索toArray()函数。使用括号将返回查询生成器实例。这通常对直接操作更有帮助,例如,如果用户有多部手机(我知道在您的情况下,只有一部手机)
toArray()
不是查询生成器的成员,因此它不能与
$user->phone()->toArray();
使用括号将返回查询生成器实例。这通常对直接操作更有帮助,例如,如果用户有多部手机(我知道在您的情况下,只有一部手机)
toArray()
不是查询生成器的成员,因此它不能与
$user->phone()->toArray();
试试
$user->phone()->get()->toArray()
怎么样$phone=$user->phone()->get()
然后$array=(array)$phone;dd($数组)
$user->phone()
将返回一个雄辩的关系,您可以从中链接查询生成器函数$user->phone
返回关系实例,这是一个雄辩的模型。请尝试$user->phone()->get()->toArray()
如何$phone=$user->phone()->get()
然后$array=(array)$phone;dd($数组)
$user->phone()
将返回一个雄辩的关系,您可以从中链接查询生成器函数$user->phone
返回关系实例,这是一个雄辩的模型。接受此答案是因为您试图解释发生了什么。最后,我向用户添加了另一个名为getPhone()
的方法,该方法返回$this->hasOne('App\Phone')->first()代码>-这将返回模型的实例。接受此答案是因为您试图解释发生了什么。最后,我向用户添加了另一个名为getPhone()
的方法,该方法返回$this->hasOne('App\Phone')->first()代码>-这将返回模型的实例。
$user->phone()->toArray();