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 查询模型关系的主要内容,如果未能解决你的问题,请参考以下文章