2017-02-28 5 views
0

ich habe drei Tabelle in mysql: 1-Benutzer table of users 2-Projekte table of project 3-project_userLaravel Beziehung Problem in vielen vielen Fall

gibt es id und project_id und user_id für Beziehung

gibt es zwei Modell: Benutzer und Projekt die Beziehung zwischen diesen Tabellen sind zu viele wenn ein Projekt erstellen vielleicht ein Projekt für zwei Personen definieren NOW wie kann ich das Projekt von jeder Person zeigen?

Antwort

0

Vorausgesetzt, dass Sie richtig Ihre Beziehungen definiert, nicht

$users = User::with('projects')->get(); 

//show each user projects 
foreach($users as $user) { 
    echo $user->projects; 
} 

//Getting project users 
$projects = Project::with('users')->get(); 

Diese Sie geben Projekte Liste, in jeder Liste können Sie sehen, welche Benutzer Zugriff hat oder nicht.

Updates

mit Angabe User_id Taking Projekt

$projects = Project::with(['users' => function ($query) use ($user_id) { 
    $query->where('user_id', '=', $user_id); 
}])->get(); 

Neuer Code Oder versuchen, den Benutzer zu bekommen

$user = User::with('projects')->where('id', $user_id)->first(); 

Oder über Projekte, durch User_id Zwangs

$projects = Project::with('users')->whereHas('users', function ($query) use ($user_id) { 
    $query->where($user_id); 
})->get(); 
+0

Blick dort mit zwei drei Tischmodell ist, ist nicht ein Modell für die Nutzer und eine andere für Projekte und gibt einen Modus für project_user Tabelle. Wenn ich ein Projekt für zwei Benutzer definiere, muss ich dieses Projekt nur diesen zwei Benutzern zeigen. und diese Regel befindet sich in der Tabelle project_user. Wie kann ich es auswählen, wenn es kein Modell gibt? und diese drei Tabelle sind relational –

+0

Überprüfen Sie mein Update. Sie können einen Benutzer erhalten und alle ihre Projekte sehen. Oder holen Sie sich ein Projekt und sehen Sie alle Benutzer, die darauf zugreifen können. – EddyTheDove

+0

Entschuldigung, ich überprüfe Ihr Update, aber es gibt ein Problem: Sie wissen, dass ich Projekt mit bestimmten user_id in einer project_user Tabelle erhalten muss.Jetzt habe ich diese user_id Aber in Ihrer Abfrage, wie ich es verwenden sollte? –

0

Soweit ich Ihre Frage verstanden habe, möchten Sie Project nach user_id abfragen. Hier ist, wie Sie es tun.

Project::with('users')->whereHas('users', function ($query) use ($user_id_array) { 
     $query->whereIn('id',$user_id_array); 
    })->get(); 

Dies wird Ihnen Projekte geben user_id von $user_id_array sind dessen. Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.

+0

Ich sende Benutzer-ID in JSon: zum Beispiel muss ich für die Benutzer-ID 2. Jetzt ist der Fehler Undefinierte Variable: user_id_array? –

+0

Ich sende Benutzer-ID in JSon: zum Beispiel muss ich für Benutzer-ID 2 projektieren.jetzt ist der Fehler das fehlende Argument 2 für Illuminate \ Database \ Query \ Builder :: whereIn(), aufgerufen ... –

0

die Art, wie ich es lösen:

//save user_id 
$user_id = $request->id; 
//select in project_user where user_id = $user_id 
$project_user = DB::table('project_user')->where('user_id', '=', $user_id)->get(); 
//create an empty array 
$p_id = array(); 
//fill empty array with project_id 
foreach($project_user as $pro) { 
$p_id[] = $pro->project_id; 
} 
//select code and id in project table where id = one of that [$p_id] array 
$data = Project::select('code','id')->whereIn('id', $p_id)->get(); 
//return your data in json 
return response()->json($data); 
Verwandte Themen