Laravel – 雄辩的“有”,“有”,“WhereHas” – 这是什么意思?

我发现这些方法背后的概念和含义有点令人困惑,有人有可能在一个例子(如果可能的话)的背景下向我解释什么是和之间的区别?

One Solution collect form web for “Laravel – 雄辩的“有”,“有”,“WhereHas” – 这是什么意思?”

with()是为了急切的加载 。 这基本上意味着,在主模型中,Laravel将预加载您指定的关系。 如果你有一个模型的集合,并且你想为它们加载一个关系,这是特别有用的。 因为在加载时只需要为集合中的每个模型运行一个附加的数据库查询,而不是一个。

例:

User > hasMany > Post

 $users = User::with('posts')->get(); foreach($users as $user){ $users->posts; // posts is already loaded and no additional DB query is run } 

具有

has()是基于关系过滤select模型。 所以它的行为非常类似于正常的WHERE条件。 如果你只是使用has('relation')这意味着你只想得到在这个关系中至less有一个相关模型的模型。

例:

User > hasMany > Post

 $users = User::has('posts')->get(); // only users that have at least one post are contained in the collection 

WhereHas

whereHas()工作原理与has()相同,但允许您为相关模型指定其他filter来检查。

例:

User > hasMany > Post

 $users = User::whereHas('posts', function($q){ $q->where('created_at', '>=', '2015-01-01 00:00:00'); })->get(); // only users that have posts from this year are returned 
  • hibernate - @ElementCollection - 奇怪的删除/插入行为
  • ADO.NETentity framework与NHibernate
  • 在加载时将自定义属性添加到Laravel / Eloquent模型?
  • 为什么人们继续使用XML映射文件而不是注释?
  • 在Laravel Eloquent中使用“with()”函数获取特定的列
  • 什么是N + 1 SELECT查询问题?
  • 使用ORM有什么好处?
  • 什么ORM与Scala一起工作良好?
  • 如何限制每个logging/组包含的关联?
  • LINQ To Entities不识别方法Last。 真?
  • 你如何使用NHibernate进行分页?