考虑以下模型
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')
的实际差异/优势是什么?
答案 0 :(得分:2)
with()
功能用于eager loading。加载一个用户时,这几乎没有什么影响。当您尝试获取roles
属性时,将执行获取此用户角色的查询,但仅针对此用户。
现在考虑从数据库加载用户列表。当您为每个用户调用roles
属性时,将为每个用户执行查询。这不是一种好的工作方式
使用with()
函数时,会急切加载关系。这意味着Laravel将在一个查询中加载所有roles
并将它们分配给正确的用户对象。现在,当您在用户对象上调用roles
属性时,已经加载了值,无需额外的数据库查询。将查询量减少到2。