Laravel 4 Laravel对多个关系有何影响

Laravel 4 Laravel对多个关系有何影响,laravel-4,Laravel 4,有人知道这是否可以在多个关系上执行吗 例如,我有一个查询,其中我不仅要筛选俱乐部名称(),还要筛选地区名称 在本例中,我希望查询结果中俱乐部(俱乐部关系)名称为阿森纳,地区名称为澳大利亚(地区关系) 执行此查询时-结果不会约束具有的区域,而只约束一个区域 whereHas是否可以链接以过滤上一个关系的whereHas的结果?如果没有,有什么建议吗 谢谢 乔恩:是的,这是可能的 生成的SQL可能是: SELECT * FROM ... WHERE (territory constraint) AN

有人知道这是否可以在多个关系上执行吗

例如,我有一个查询,其中我不仅要筛选俱乐部名称(),还要筛选地区名称

在本例中,我希望查询结果中俱乐部(俱乐部关系)名称为阿森纳,地区名称为澳大利亚(地区关系)

执行此查询时-结果不会约束具有的区域,而只约束一个区域

whereHas是否可以链接以过滤上一个关系的whereHas的结果?如果没有,有什么建议吗

谢谢

乔恩:是的,这是可能的

生成的SQL可能是:

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

SELECT * FROM ... WHERE (territory constraint) AND ((homeClub constratint) OR (awayClub constraint))
为此,您需要将两个查询嵌套在一个

$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' );
        });
    });

多亏edi9999向我展示了正确的方向-我没有正确考虑

使用
匿名函数中的主要雄辩对象,我在homeClub和awayClub上放置了whereHas和orWhereHas约束,这就成功了

$ret->with('territory')->with('homeClub')->with('awayClub')->with('programme');

    $ret
        ->whereHas('territory',function( $query ) use ( $parameterValues ){
            $query->where('region', $parameterValues['region_names'] );
        })
        ->whereHas('season', function ( $query ) use ( $parameterValues ){
            $query->where('name', $parameterValues['season_names'] );
        })
        ->where( function( $subquery ) use ( $ret ){
            $ret->whereHas('homeClub', function ( $query ){
                $query->where('name','Arsenal' );
            } );
            $ret->orWhereHas('awayClub', function ( $query ){
                $query->where('name','Arsenal');
             });
        });

我认为你不需要“with”,因为这里有“wherehads”

Model::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
。我得到一个错误:
SQLSTATE[42S22]:未找到列:1054未知列“在where子句中有”(SQL:select*from
broadcasts`where(select count()from
uploads
where
upload\u id
=
uploads
id和
type
=国际观众)>=1和(从
地区
中选择count(),其中
广播
地区地区地区地区地区和
地区
=澳大利亚)>=1和(
拥有
=家庭俱乐部))`当您强制执行其他约束时,orWhereHas的行为似乎很奇怪。请使用生成的SQL参考我的。为我干杯!我对一个与比赛表相关的主队和客队做了类似的事情。Debugbar告诉我这是结果:选择*from
games
where
seasure
=“2”和
series
='1'和((从
团队
其中
团队
id=
游戏
主场团队id和
用户id
='1')>=1或(从
团队
其中
团队
id
游戏访客团队id和
用户id
中选择count>=1)按
系列
asc、
home\u team\u id
asc、
game\u number
asc排序……我认为现在我最好重构成一个视图,尽管这是一个很好的练习。
Model::whereHas('territory',function( $query ){
        $query->where('region','Australia');
    })->whereHas('homeClub', function ( $query ) {
        $query->where('name', 'Arsenal' );
    })->orWhereHas('awayClub', function ( $query ) {
        $query->where('name', 'Arsenal' );
    });