gpt4 book ai didi

laravel-4 - Laravel whereHas 对多重关系

转载 作者:行者123 更新时间:2023-12-03 21:12:28 24 4
gpt4 key购买 nike

有谁知道这个new feature可以在多个关系上执行吗?

例如,我有一个查询,我不仅要过滤俱乐部名称( related question ),还要过滤区域名称。

在这个例子中,我想要查询结果,其中俱乐部(俱乐部关系)名称是阿森纳,地区是澳大利亚(领土关系)

$ret->with('territory')->with('homeClub')->with('awayClub');
$ret->whereHas('territory',function( $query ){
$query->where('region','Australia');
})->whereHas('homeClub', function ( $query ) {
$query->where('name', 'Arsenal' );
})->orWhereHas('awayClub', function ( $query ) {
$query->where('name', 'Arsenal' );
});

执行此查询时 - 结果不限制领土 whereHas只是俱乐部之一。

可以链接 whereHas 以过滤先前关系 whereHas 的结果吗?如果没有,有什么建议吗?

谢谢

乔恩

最佳答案

是的,这是可能的。

生成的 SQL 可能是:

SELECT * FROM ... WHERE (territory constraint) AND (homeClub constratint) OR (awayClub constraint)

这意味着如果 awayClub constraint满足,该行将被检索。我想你想在生成的sql中添加一个括号:
SELECT * FROM ... WHERE (territory constraint) AND ((homeClub constratint) OR (awayClub constraint))

为此,您需要将两个查询嵌套在一个 where 中:
$ret->with('territory')->with('homeClub')->with('awayClub');
$ret->whereHas('territory',function( $query ){
$query->where('region','Australia');
})
->where(function($subQuery)
{
$subQuery->whereHas('homeClub', function ( $query ) {
$query->where('name', 'Arsenal' );
})
->orWhereHas('awayClub', function ( $query ) {
$query->where('name', 'Arsenal' );
});
});

关于laravel-4 - Laravel whereHas 对多重关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21335832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com