2013-03-01 56 views
0

我努力使使用Laravel雄辩的ORM多对多where_in语法Laravel雄辩ORM

连接查询我有有一个多对多的关系

class Type extends Eloquent 
{ 
    public function activities() 
    { 
     return $this->has_many_and_belongs_to('Activity'); 
    } 
} 
class Activity extends Eloquent 
{ 
    public function types() 
    { 
     return $this->has_many_and_belongs_to('Type'); 
    } 
} 

在我的数据库中的两个班我有类型,活动和activities_types表

我试图重新创建下面的SQL查询

SELECT a . * 
FROM activities a 
JOIN activities_types at ON a.id = at.activities_id 
WHERE at.type_id 
IN (1, 2, 4) 
GROUP BY a.id 

我只是没有掌握ORM语法。我试过

$ activities = Activity :: types()。where_in(“id”,$ types) - > get();

,但我得到一个错误"Non-static method Activity::types() should not be called statically, assuming $this from incompatible context"

感谢

回答

1

关系不是定义为静态方法的指针。因此,您不能像::type()那样使用它们。另外,关系并没有给你准确的东西。因为你只用活动栏感兴趣,你可以这样做:

$activities = Type::where_in("id", $types)->get()->activites()->group_by('id')->get(); 

在另一方面,我认为你可以用加入处理这个问题:

$activites = Activity::select('activities.*')->join('activities_types','activities.id','=','activities_types.activities_id')->where_in('activities_types.type_id',$types)->group_by('activities.id')->get(); 
+0

谢谢你 - 我仍然摸索着通过这个方式,但这是一个很大的帮助 – tarling 2013-03-02 20:54:38