Laravel whereHas on multiple relationships

后端 未结 3 1534
庸人自扰
庸人自扰 2020-12-25 15:45

Does anyone know if this new feature can be performed on multiple relationships?

For example, I have a query where I want to filter on not only the club name (relate

3条回答
  •  -上瘾入骨i
    2020-12-25 15:49

    Yes that's possible.

    The generated SQL will probably be:

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

    This means that if awayClub constraint is satisfied, the line will be retrieved. I think you want to add a parenthesis to the generated sql:

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

    to do that, you need to nest both queries inside a 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' );
            });
        });
    

提交回复
热议问题