在laravel中使用关系时,可以使用或不使用括号来调用关系函数:
public function posts()
{
return $this->hasMany('Post');
}
$user->posts();
$user->posts;
第一个调用将返回查询构建器的实例,第二个调用将返回所有帖子的数组。
这个功能是如何制作的?
答案 0 :(得分:2)
通过实施__get
魔术方法来完成:
class User {
private $posts = [1, 2, 3];
public function __get($key) {
if ($key === 'posts')
return $this->$key;
}
public function posts() {
return count($this->posts);
}
}
$u = new User;
var_dump($u->posts());
var_dump($u->posts);
输出
int(3)
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}