在Laravel中直接访问和使用有什么区别?

时间:2017-04-07 09:56:06

标签: php laravel

考虑以下模型

class User {
    public function roles()
    {
        return $this->hasMany('Roles');
    }
}

我可以获取用户详细信息,如下所示

$user1 = User::find(1);
$user2 = User::with('roles')->find(1);

上述两种方法都相同。即使不使用with('roles'),我仍然可以访问该特定用户的roles

echo $user1->roles; // Outputs all the roles of that user

所以,我的问题是使用with('relation')的实际差异/优势是什么?

1 个答案:

答案 0 :(得分:2)

with()功能用于eager loading。加载一个用户时,这几乎没有什么影响。当您尝试获取roles属性时,将执行获取此用户角色的查询,但仅针对此用户。

现在考虑从数据库加载用户列表。当您为每个用户调用roles属性时,将为每个用户执行查询。这不是一种好的工作方式 使用with()函数时,会急切加载关系。这意味着Laravel将在一个查询中加载所有roles并将它们分配给正确的用户对象。现在,当您在用户对象上调用roles属性时,已经加载了值,无需额外的数据库查询。将查询量减少到2。