Laravel 5.2Eloquent-多対多の関係によるモデル

kayex

私には、環境、サイト、インシデントの3つのモデルがあります。それぞれにそれぞれのテーブルがあります。

私のモデルの関係は次のように定義されています。

環境には多くのサイトがあります(environment_idサイトテーブル内)

public function sites()
{ 
   return $this->hasMany('App\Site');
}

サイトは、(環境に属しているenvironment_idサイトのテーブルに)、多くのインシデントに属している(とincident_site関係テーブルincident_idsite_id

public function environment()
{
    return $this->belongsTo('App\Environment');
}

public function incidents()
{
    return $this->belongsToMany('App\Incident');
}

インシデントは多くのサイトに属しています(incident_idおよびとのincident_site関係テーブルsite_id

public function sites()
{
    return $this->belongsToMany('App\Site');
}

問題:次のような環境モデルを使用して、すべてのサイトインシデントのコレクションを取得しようとしています。

$environment->incidents()->count();

これまでコントローラーで動作させることができた唯一の方法は次のとおりです。

    $environment->load(['sites.incidents' => function ($q) use ( &$incidents ) {
       $incidents = $q->orderBy('id','desc')->get();
    }]);

ただし、アプリの他の領域で作業することは理想的ではありません。

質問:環境モデルのメソッドを使用して、上記の関係を機能させるにはどうすればよいですか?もっと簡単な方法はありますか?

ジェイシンカー

hasManyThrough()多対多の関係で使用するための規定はありませんただし、どちらDB::raw()かを使用してこれを実現することも、このフォーラムで提供されているようにBaseModelに次の関数を追加することもできます

public function manyThroughMany($related, $through, $firstKey, $secondKey, $pivotKey)
   {
       $model = new $related;
       $table = $model->getTable();
       $throughModel = new $through;
       $pivot = $throughModel->getTable();

       return $model
           ->join($pivot, $pivot . '.' . $pivotKey, '=', $table . '.' . $secondKey)
           ->select($table . '.*')
           ->where($pivot . '.' . $firstKey, '=', $this->id);
   }

更新:使用

まず、次のモデルを作成する必要があります incident_site

class incident_site extends Model{
    public $table = 'incident_site';
    //your other code
}

Enviormentモデルに次のIncidents()メソッドを追加します

public function Incidents()
    {
        return $this->manyThroughMany('App\Incident', 'App\incident_site', 'site_id', 'id', 'incident_id');
}

更新:

必要に応じて機能を変更しました。
関数を次のように変更します。

public function manyThroughMany($related, $through ,$middle , $firstKey, $secondKey, $pivotKey)
    {
        $model = new $related;
        $table = $model->getTable();
        $throughModel = new $through;
        $pivot = $throughModel->getTable();
        $middleModel = new $middle;
        $middleModelIds = $middleModel->where($this->getForeignKey(),$this->getKey())->get()->lists('id')->toArray();
        //$middleModelIds = $this->with($middleModel)->where()->get()->lists('id')->toArray();
        //$middleModelIds = $this->sites()->get()->lists('id')->toArray();
        return $model
            ->join($pivot, $pivot . '.' . $pivotKey, '=', $table . '.' . $secondKey)
            ->select($table . '.*')
            ->whereIn($pivot . '.' . $firstKey,$middleModelIds);// '=', $this->id);
    }

使用法:
中間テーブルの追加の引数を渡す必要があります。

public function Incidents()
    {
        return $this->manyThroughMany('App\Incident', 'App\incident_site','App\Site','site_id', 'id', 'incident_id');
    }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Laravel Eloquent3つのモデル間の多対多の関係

分類Dev

Laravel 5 –モデルと関連するモデルIDに基づいて特定の多対多の関係を取得します

分類Dev

Laravel / Eloquent-morphToMany関係を持つ多対多のピボットモデル

分類Dev

Laravelの3つのテーブルのEloquentモデルで多対多の関係とともに1対多を定義するにはどうすればよいですか?

分類Dev

2つのユーザーモデルで役割を共有する多対多の関係をLaravel

分類Dev

Laravel Eloquent:1対1と1対多の2つのモデル間の複数の関係

分類Dev

多対多の関係船laravel5のピボットテーブルからデータを取得する

分類Dev

Laravel5。多対多の関係。ビルドクエリ

分類Dev

Laravelの多対多関係モデルによる雄弁なモデルのソート

分類Dev

多対多の関係をLaravel-モデルを取得する

分類Dev

多対多が存在するLaravelモデルの関係

分類Dev

EloquentとLaravel5を使用してjson応答にモデルの関係を含める

分類Dev

Laravel Eloquent ORM 1対多の関係、2つのテーブルから選択

分類Dev

2つのモデルに共通のmodel_id-Laravel5-Eloquent

分類Dev

関係の多対多の関係によるLaravelフィルター

分類Dev

Laravel、複数のモデルとの多対多の関係

分類Dev

Laravel、複数のモデル間の多対多の関係

分類Dev

Laravel elequent 5で多対多の関係を保存しますか?

分類Dev

Laravel 5 | 多対多の関係が機能していない

分類Dev

多対多のLaravel複数の中間テーブルとのEloquent関係

分類Dev

Laravel5多形関係のある読み取り専用ビューモデル

分類Dev

Laravel 5の同じテーブルに1対多の関係を作るにはどうすればよいですか?

分類Dev

Laravel 5:結果に「ピボット」なしで多対多の関係をクエリする

分類Dev

Laravel 8.x、3モデル、多対多の関係

分類Dev

Laravel Eloquentの多対多の関係:明示的なピボットテーブルを使用する

分類Dev

LaravelでEloquentを使用して1対多の関係のデータを取得するにはどうすればよいですか?

分類Dev

Eloquent多対多関係を構築するための助けが必要(laravel 5.1)

分類Dev

Laravel> Eloquent Queryの使用 多対多の関係

分類Dev

Eloquentを使用して多対多の関係をLaravel

Related 関連記事

  1. 1

    Laravel Eloquent3つのモデル間の多対多の関係

  2. 2

    Laravel 5 –モデルと関連するモデルIDに基づいて特定の多対多の関係を取得します

  3. 3

    Laravel / Eloquent-morphToMany関係を持つ多対多のピボットモデル

  4. 4

    Laravelの3つのテーブルのEloquentモデルで多対多の関係とともに1対多を定義するにはどうすればよいですか?

  5. 5

    2つのユーザーモデルで役割を共有する多対多の関係をLaravel

  6. 6

    Laravel Eloquent:1対1と1対多の2つのモデル間の複数の関係

  7. 7

    多対多の関係船laravel5のピボットテーブルからデータを取得する

  8. 8

    Laravel5。多対多の関係。ビルドクエリ

  9. 9

    Laravelの多対多関係モデルによる雄弁なモデルのソート

  10. 10

    多対多の関係をLaravel-モデルを取得する

  11. 11

    多対多が存在するLaravelモデルの関係

  12. 12

    EloquentとLaravel5を使用してjson応答にモデルの関係を含める

  13. 13

    Laravel Eloquent ORM 1対多の関係、2つのテーブルから選択

  14. 14

    2つのモデルに共通のmodel_id-Laravel5-Eloquent

  15. 15

    関係の多対多の関係によるLaravelフィルター

  16. 16

    Laravel、複数のモデルとの多対多の関係

  17. 17

    Laravel、複数のモデル間の多対多の関係

  18. 18

    Laravel elequent 5で多対多の関係を保存しますか?

  19. 19

    Laravel 5 | 多対多の関係が機能していない

  20. 20

    多対多のLaravel複数の中間テーブルとのEloquent関係

  21. 21

    Laravel5多形関係のある読み取り専用ビューモデル

  22. 22

    Laravel 5の同じテーブルに1対多の関係を作るにはどうすればよいですか?

  23. 23

    Laravel 5:結果に「ピボット」なしで多対多の関係をクエリする

  24. 24

    Laravel 8.x、3モデル、多対多の関係

  25. 25

    Laravel Eloquentの多対多の関係:明示的なピボットテーブルを使用する

  26. 26

    LaravelでEloquentを使用して1対多の関係のデータを取得するにはどうすればよいですか?

  27. 27

    Eloquent多対多関係を構築するための助けが必要(laravel 5.1)

  28. 28

    Laravel> Eloquent Queryの使用 多対多の関係

  29. 29

    Eloquentを使用して多対多の関係をLaravel

ホットタグ

アーカイブ