hasMany关系中的多个外键导致带有额外where子句的麻烦

时间:2015-01-20 15:56:57

标签: php laravel laravel-4 eloquent

假设您有一个团队和一个匹配表。团队有多个匹配项,在visitant_id或local_id上有外键(另请参阅https://github.com/laravel/framework/issues/1272

在团队模型中:

public function allMatches()
{
     return $this->hasMany('Match', 'visitant_id')->orWhere('local_id', $this->id);
}

这样做很好:

$team = Team::find(2);
$matches = $team->all_matches;

此查询中的结果:

 select *
 from `matches` 
 where `matches`.`visitant_id` = ? 
 or `local_id` = ?

但是,使用额外的where子句进行扩展时,例如:

$matches = $team->all_matches->where('type','=',1);

查询变为

 select * 
 from `matches` 
 where `matches`.`visitant_id` = ? 
 or `local_id` = ? and 'type' = ?

这意味着它选择所有访问者匹配,即使类型不正确,因为该子句周围没有()。有什么办法解决吗?

1 个答案:

答案 0 :(得分:0)

您可以使用参数分组。这里描述了http://laravel.com/docs/4.2/queries#advanced-wheres