0

LaravelのEloquentORMを使用して結合クエリを作成するのに苦労しています

多対多の関係を持つ2つのクラスがあります

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

私のデータベースには、types、activitys、およびactivitys_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構文を理解していません。私はもう試した

$ activitys = Activity :: types()。where_in( "id"、$ types)-> get();

しかし、エラーが発生します"Non-static method Activity::types() should not be called statically, assuming $this from incompatible context"

ポインタをありがとう

4

1 に答える 1

1

関係は静的メソッドとして定義されていません。したがって、のように使用することはできません::type()。さらに、関係はあなたが正確に望むものをあなたに与えません。アクティビティ列だけに興味があるので、次のように実行できます。

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

一方、joinを使用してこれを処理できると思います。

$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();
于 2013-03-02T11:23:51.990 に答える