ピボットテーブルにLaravelテーブルの関係

ロバート・ティルタ:

私は、ピボットテーブルに接続されているテーブルとlaravelで私のモデルの設定を取得する方法について混乱しています。

ここに問題があります

私が持っていると言います

Locations
    id
    name

area_types
    id
    name

area_type_location (Pivot table)
    id
    location_id
    area_type_id

area_test
    id
    area_type_location_id
    clean
    headCount

テーブル間の関係は、異なる領域の種類が異なる場所に属しています。すなわち:ビーチ、25メートルプール、子供用プール、バーベキューなど

テストが存在する領域から生成されなければならないためarea_testがピボットテーブルに接続され、この場合には、異なる場所で登録されている領域です。したがって、など、測定し、毎日検査する必要があります

私は、しかし、私は私は私のarea_testモデルを構築しますどのように私の頭の上に取得することはできません、多くの関係に多くのためにarea_typesと場所の間の構造を理解できますか?私のテストされている場所> - どのように私は場所のテーブルからデータを取得するのですか?

私は私のピボットテーブル用のモデルを作成する必要がありますか?それはlaravelで良い習慣ですか?

誰もが同じユースケースを持っていますか?

私は雄弁に読んを通じて多くを持っている 関係が、私はそれは、ピボットテーブルを介して得ることについて言及していないことを理解しています。私のユースケースが同じであれば、私はかなり得ることはありません。

感謝

ロバート・ティルタ:

最後に、どうやらからデータを取得する方法がいくつかありますlocationsし、テーブルarea_tests

ティンカーにしようと、それが動作しますが、

まず、私は私のピボットテーブルのピボットモデルを作成する必要があります。

class LocationAreaType extends Pivot{

public function location(){
    return $this->belongsTo(Location::class);
}

public function areaType(){
    return $this->belongsTo(AreaType::class);
}

public function AreaTests(){
    return $this->hasMany(AreaTest::class, 'location_area_type_id');
}

}

私が使用することができhasManyThrough、私は私の場所のテーブルに作成する必要があるとの関係を

public function areaTests()
{
    return $this->hasManyThrough(
        AreaTest::class,
        LocationAreaType::class,
        'location_id',
        'location_area_type_id');
}

私は簡単でareaTestsを得ることができるこの方法は$location->areaTests、私の問題は決定されなかったlocation_area_type_id外国人として。あなたは、私がピボットと使用のhasMany laravelを拡張したときに明らかに自動自体が外部キーを認識しない、これを決定する必要があります。

このように、私はまたにより、ピボットテーブルを介してアクセスすることができます

$location->areaType[0]->pivot->areaTests

しかし、laravelだけなので、両方のテーブルから外部キーを認識location_idしてarea_type_id、私は含める必要がありid、それは外国決定するので(AreaTestテーブルデータを取得するために、ピボットテーブルのをlocation_area_type_id

だから、場所のモデルに私が列を取得する必要があります

public function poolTypes()
{
    // Get the ID of the pivot table to get the poolTests table (connected with ID column)
    return $this->belongsToMany(PoolType::class)
        ->using(LocationPoolType::class)
        ->withPivot('id');
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=20026&siteId=1