在laravel文档中,他们讨论了急切加载相关数据以解决N + 1查询问题。我想根据这些关系中的数据过滤我的数据,而不必迭代结果(也就是说,我希望在查询时完成)
文档中使用的示例如下:
$books = App\Book::with('author.contacts')->get();
如果我想过滤这些图书只包含那些作者的邮政编码12345,我该怎么做?
以下查询都不适合我:
$books = App\Book::with('author.contacts')->where('zip', 12345)->get();
$books = App\Book::with('author.contacts')->where('author.contacts.zip', 12345)->get();
在Eloquent中有一种简单的方法吗?
答案 0 :(得分:1)
为了实现您的目标,您可以使用以下查询:
App\Book::with('author.contacts')
->whereHas('author.contacts' => function($q){
$q->where('zip', 12345)}
)
->get();
可以说你也可以在contacts
模型中使用类似的查询,类似于以下内容:
public function withZipCode()
{
return Contacts::where('zip', 12345);
}
老实说,我没有尝试过,但它应该有用。