如果我有一个模型可以查询User
。并且User
有一个外部关联的表Address
。
public function address() {
return $this->hasOne('Address', 'id');
}
我的疑问如下:
1.我们可以使用User->address
从Address
表中获取一个数据。我们还可以使用User->address()
来获取数据。我可以dd
来获取属性两种方式有什么区别?
2.当我使用User->address->first()
时,它返回Address
中的第一个数据,而不是与指定的id
匹配的第一个数据。但是我使用User->address()->first()
可以获取正确的数据
以上原因是什么?
答案 0 :(得分:0)
通常,当您使用$user->address
时,Laravel在User
模型中搜索地址属性或getAddressAttribute()
模型中的User
方法。
仅当您使用address()
之类的()
时,才会调用$user->address()
方法。
答案 1 :(得分:0)
在这种情况下,在这种情况下,->address
是->address()->first
的简写,它将查询结果“缓存”在您的User
对象上。因此,多次调用->address
不会进行其他数据库查询。每次调用->address()->first()
都会进行数据库查询。
答案 2 :(得分:0)
主要区别如下
$model->address
返回关系
$model->address()
返回查询构建器的实例,该实例可用于以下进一步约束
$model->address(function($query){
$query->where('postcode', 'testpostcode');
}
答案 3 :(得分:-1)
据我所知,$model->address
获取关系数据项,$model->address()
获取自定义语句的关系模型实例。如果要使用$ model-> address(),则必须使用任何查询生成器方法来获取任何数据。等等。$model->address()->where('status', true)->get()
$model->address()->count()