2013-03-01 1 views
0

Я изо всех сил, чтобы сделать запрос с соединением с помощью Laravel в Красноречивый ОРММногие ко многим where_in синтаксис для Laravel красноречивый ОРМ

У меня есть два класса, которые имеют отношения многие ко многим

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

 Смежные вопросы

  • Нет связанных вопросов^_^