拉雷维尔-雄辩的“有”、“有”、“哪里有”-它们是什么意思?

我发现这些方法背后的概念和含义有点混乱,有人能在一个例子的上下文中(如果可能的话)向我解释一下之间的区别吗

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年开始转发帖子的用户

发表评论