Laravel查询使用with()语句

时间:2018-08-16 00:27:05

标签: php mysql laravel

尝试在查询中使用with语句时遇到麻烦,如此处所示

thePage::select('field1','field2')
->with('pagePhotos')

此查询工作正常,但是如果我只想获取photoLocation =“ Miami”的pagePhotos怎么办?该photoLocation字段不在Page Model上,仅在pagePhotos表上。

下面是在黑暗中的一击,这是行不通的,但它显示了我想了解的逻辑,希望!

thePage::select('field1','field2')
->with(
    'pagePhotos'->where('photoLocation','=','Miami')
)->get();

编辑

除了这里的答案/评论之外,我发现它还帮助我获得了完美的查询https://stackoverflow.com/a/41436703/7675570

以防万一有人遇到类似情况也可以提供帮助。

2 个答案:

答案 0 :(得分:3)

我认为您应该使用闭包来处理查询。

thePage::select('field1','field2')->with(array('pagePhotos' => function($query) {
        $query->where('photoLocation','=','Miami');
}))->get();

希望它可以为您提供帮助

答案 1 :(得分:2)

使用whereHas

thePage::select('field1','field2')
    ->with('pagePhotos')
    ->whereHas('pagePhotos', function($query) {
        $query->where('photoLocation', '=', 'Miami');
    })
    ->get();

Laravel Querying Relationship Existence

编辑:

如果要在pagePhotos字段上选择而不是

->with('pagePhotos')

->with('pagePhotos' => function($query) {
    $query->select('field1', 'field2');
})