我发现这些方法背后的概念和含义有点混乱,有人能在一个例子的上下文中(如果可能的话)向我解释一下与之间的区别吗
与
with()用于快速加载。这基本上意味着,沿着主模型,Laravel将预加载您指定的关系。如果您有一组模型,并且希望为所有模型加载一个关系,那么这将特别有用。因为使用渴望加载时,您只运行一个额外的DB查询,而不是针对集合中的每个模型运行一个查询
例如:
User>;有许多>;发布
$users=User::with('posts')->;get();
foreach($users作为$user){
$users->;posts;//已加载posts,并且未运行其他数据库查询
}
有
has()是根据关系过滤选择的模型。因此,它的行为非常类似于正常的WHERE条件。如果您只使用has('relation'),这意味着您只想获得在该关系中至少有一个相关模型的模型
例如:
User>;有许多>;发布
$users=User::has('posts')->;get();
//集合中只包含至少有一篇文章的用户
哪里有
whereHas()的工作原理与has()基本相同,但允许您为要检查的相关模型指定其他过滤器
例如:
User>;有许多>;发布
$users=User::whereHas('posts',函数($q){
$q->;其中('created_at','gt;=','2015-01-01 00:00:00');
})-&燃气轮机;get();
//仅返回从2015年开始转发帖子的用户