Php 使用with()语句的Laravel查询

Php 使用with()语句的Laravel查询,php,mysql,laravel,Php,Mysql,Laravel,在如下所示的查询中尝试使用with语句时遇到问题 thePage::select('field1','field2') ->with('pagePhotos') 这个查询很好,但是如果我只想在photoLocation=“Miami”中获取页面照片,该怎么办。此photoLocation字段不在页面模型上,仅在pagePhotos表上 下面是一个黑暗中的刺刀,不起作用,但它显示了我试图达到的逻辑,我希望 thePage::select('field1','field2') ->wi

在如下所示的查询中尝试使用with语句时遇到问题

thePage::select('field1','field2')
->with('pagePhotos')
这个查询很好,但是如果我只想在photoLocation=“Miami”中获取页面照片,该怎么办。此photoLocation字段不在页面模型上,仅在pagePhotos表上

下面是一个黑暗中的刺刀,不起作用,但它显示了我试图达到的逻辑,我希望

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

除了这里的答案/评论之外,我发现这有助于我完善查询


万一有人遇到类似的情况,它可能会有所帮助。

使用
whereHas

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

编辑:

如果您希望在pagePhotos字段中进行选择,而不是

->with('pagePhotos')
是否将参数作为数组传递

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

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

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

希望它能帮助您

谢谢,这是我想要的。有没有一种简单的方法可以在页面照片字段中进行选择?或者我需要缩小模型本身的范围吗?@weekapaug刚刚发布了一个对我的答案的编辑,以帮助你解决这个问题,我明白了,但这是一个“取而代之”的场景。有没有办法在这一级别从两者中进行选择?我知道我可以在模型级别选择它,但是在这里的查询中呢?这不是一个相反的场景,您可以应用
whereHas
进行筛选,并
with
指定要从关系中选择的字段我看到了,我做了->with('pagePhotos'=>函数($query){$query->select('field1',field2')->where('photoLocation','=','Miami');})但我仍然得到所有字段。这是另一个问题,抱歉!!