Php 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()时,它会抛出一个错误,即找不到该方法 为什么我要访问手机作为属性而不是功

我在这里设置了laravel文档中解释的
用户
-
电话
关系:

这工作正常,并显示了数据库中的电话数据

我不明白的是为什么我用
$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();