2017-05-06 13 views
3

私は、ユーザーがプロジェクトを作成してタスクを割り当てることができるシステムを持っています。現在、私は、現在のユーザーによって作成された、またはそのユーザーに割り当てられたすべてのプロジェクトを表示するために、ビューをスコープしようとしています。私は多くの関係を3つのテーブルusers,projectsおよびproject_userで設定しました。 projectsテーブルに誰がそれを所有しているのかを示すカラムuser_idがあります。Laravelで2つの雄弁なコレクションを統合する

this questionに基づいてコレクションにmerge methodを使用してみましたが、うまく動作しません。

$projects = new \Illuminate\Database\Eloquent\Collection(); 

$userProjects = Project::where(array('company_id' => Auth::user()->company_id, 'user_id' => Auth::user()->id)) 
     ->orderBy('created_at', 'asc') 
     ->get(); 


//foreach($userProjects as $up){ 
    $projects = $projects->merge($userProjects); 
//} 

$assignedProjects = User::where('id', Auth::user()->id)->with('project')->orderBy('created_at', 'asc')->get(); 

foreach($assignedProjects as $assigned){ 
    $projects = $projects->merge($assigned->project); 
} 
dd($projects->all()); 

次に、私は配列に変換しようとしましたが、手動でオブジェクトを作成しましたが、それはどちらもうまく動作せず、リソースを心配していました。 enter image description here

目標は何とかその組み合わせのコレクションにこれらを取得することですプロジェクトコレクションされ

$userProjects = Project::where(array('company_id' => Auth::user()->company_id, 'user_id' => Auth::user()->id)) ->orderBy('created_at', 'asc') ->get()->toArray(); $assignedProjects = User::where('id', Auth::user()->id)->with('project')->orderBy('created_at', 'asc')->get()->toArray(); $projects = array_merge((array) $userProjects, (array) $assignedProjects[0]['project']); $cleaned = array_unique($projects, SORT_REGULAR); $merge = array('projects' => (object) $cleaned); $projects = (object) $merge; dd($projects); 

この

は、ユーザーのコレクションですが、私はこれだけ enter image description here

これからのプロジェクト関係を必要とします$ project-> title(たとえば)を使ってビューからアクセスできます。

ユーザーが「所有」しているプロジェクトでこれを実行したときにうまくいきましたが、ユーザーが所有するプロジェクトとユーザーに割り当てられたプロジェクトの両方を表示するにはどうすればよいですか?

答えて

1

あなたはwhereHas方法を探しています:

$allUserProjects = Project::whereHas('users', function ($query) { 
     // you can replace 'id' column by 'users.id' for clarity 
     $query->where('id', Auth::user()->id); 
    }) 
    ->orWhere(function ($query) { 
      $query->where('company_id', Auth::user()->company_id) 
        ->where('user_id', Auth::user()->id); 
    }) 
    ->orderBy('created_at', 'asc') 
    ->get(); 
+0

あなたは、そんなに簡単に素晴らしいです、ありがとうございました!これのコンテキストを探している他の人にはリンクがあります:https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-existence – Derek