Laravel 查询模型关系

Posted

技术标签:

【中文标题】Laravel 查询模型关系【英文标题】:Laravel querying model relationships 【发布时间】:2014-01-18 15:45:50 【问题描述】:

有没有办法做类似的事情?

Picture::with('gallery')->where('gallery.path', $galleryPath)->first();

它应该搜索一条记录,但查询将应用于它的关系。

【问题讨论】:

【参考方案1】:

如果您使用的是 Laravel 4.1:

$picture = Picture::whereHas('gallery', function($q) use ($galleryPath)

    $q->where('path', $galleryPath);

)->first();

Laravel 4:

$picture = Picture::with(array('gallery' => function($q) use ($galleryPath)
 
   $q->where('path', $galleryPath); 
 ))->first();

【讨论】:

对我不起作用 :( 即使 Gallery::has('pictures')->get() 返回一个空数组。【参考方案2】:

我相信你要找的是Eager Load Contraints

您可以使用函数回调例如指定关系的条件

Picture::with(array('gallery' => function($query) 
 
   $query->where('path', $galleryPath); 
 ))->get();

【讨论】:

您的查询将返回所有图片记录,并急切加载并加入路径匹配的图库记录。它应该做的是仅加载那些具有与路径匹配的画廊的图片记录。你看出区别了吗? 嗯,如果你使用的是 Laravel 4.1,你可以使用 whereHas 方法,该方法应该返回至少有一个具有指定条件的画廊的图片记录。

以上是关于Laravel 查询模型关系的主要内容,如果未能解决你的问题,请参考以下文章