2017-03-15 16 views
0

私はピボットテーブルのIDを使ってデータを読み込もうとしています。Laravel熱心な負荷ピボット?

今私は手動でやったことがありますが、関係をもって雄弁にこれを直接行う方法があるのだろうか?

$ids = $tournament->matches 
        ->pluck('users') 
        ->flatten() 
        ->pluck('pivot') 
        ->pluck('team_id') 
        ->unique(); 

$teams = \App\Models\Team::whereIn('id', $ids)->get()->keyBy('id'); 

$tournament->matches->each(function ($match) use ($teams) { 
    $match->users->each(function ($user) use ($teams) { 
     $user->team = @$teams[$user->pivot->team_id] ?: null; 
    }); 
}); 

答えて

1

最終的にモデルを拡張するPivotのインスタンスを返すことができます。そう、元気です。トーナメントであり、トーナメントモデル

/** 
    * @param Model $parent 
    * @param array $attributes 
    * @param string $table 
    * @param bool $exists 
    * @return ProjectTeamPivot 
    */ 
    public function newPivot(Model $parent, array $attributes, $table, $exists) 
    { 
     return new TeamPivot($parent, $attributes, $table, $exists); 
    } 

にし、あなたのチームのピボットクラスで、その後多くのチーム関係に属しているが、実際に得ていない https://softonsofa.com/laravel-custom-pivot-model-in-eloquent/

+0

ここに上でより多くの情報ヘッドに

use Illuminate\Database\Eloquent\Relations\Pivot; class TeamPivot extends Pivot { /** * @var array */ protected $fillable = []; protected $casts = []; // this is the instance of model itself which represents the intermediate table so you can define any kind of relation as you would define in normal model load it eagerly like protected $with = []; // you can always load a model if you fill the relation name in this array } 

以下のようになりますこれはまったく、多くのことを試みているが、何も働いていない。 – Rob

+0

通常のモデルを照会するときにそのピボットを照会することができる場合は、ミドルテーブルを表すカスタムピボットクラスを作成しましたか?慣例では中間テーブルモデルは必要ありませんが、中間テーブルにはアプリケーションの他の部分にリンクする情報がある場合、中間テーブルを表すモデルが必要な場合があり、中間テーブルを表すモデルがあれば、他のレギュラーモデルとそれはあなたが私のことを混乱させるものです。:) –

+0

ねえ、はい、私は今それを得ました、素晴らしい作品。実際には非常にシンプルで、私はそれをoverthinking :-) – Rob

関連する問題