2017-02-08 14 views
1

Ich habe eine Tabelle, die eine Spalte interviewer_id hat, die der id Benutzer Tabelle entspricht. Ich gruppiere die Daten gemäß der interviewer_id in meinem Controller und möchte den Namen zur ID jeder Gruppe aus der Benutzer-Tabelle holen. Hier ist, was ich ausprobiertAbrufen von Spaltendaten einer anderen Tabelle mit ID Laravel

$int_payment = IntPayments::where('month',$month_year)->groupBy('interviewer_id')->get(); 
    foreach ($int_payment as $inter) { 
     $inters = User::where('id',$inter->interviewer_id)->get(); 

    } 
    return response()->json(['inters',$inters]); 

Hier zeigt meine Antwort nur eine Gruppe Daten durch Benutzer abgerufen. Ich möchte die Zeile aus der Tabelle Benutzer erhalten, wo seine id ist ID der Gruppe

Hier ist, was ich genau will. Wenn ich als Antwort $ int_payment zurückgebe, bekomme ich diese Antwort.

["inters",[{"id":2,"candidate_id":"13","interviewer_id":"1","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"},{"id":4,"candidate_id":"13","interviewer_id":"2\r\n","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"},{"id":1,"candidate_id":"13","interviewer_id":"4","profile_id":"","exp":"5-10","payment_status":"unpaid","month":"Feb 2017","created_at":"2017-02-08 04:56:40","updated_at":"2017-02-08 04:56:40"}]] 

Wenn Sie die Antwort sehen gibt es drei Gruppen mit ids 2,4 und 1. Diese IDs werden ID des Benutzers in der Benutzertabelle. Ich möchte den Benutzernamen erhalten, der zu den IDs gehört.

Antwort

0

Versuchen Sie dieses:

IntPayments::select('interviewr_TABLE.*', 'users.name')->where('month',$month_year)->leftJoin('users', 'users.id', '=', 'interviewr_TABLE') ->groupBy('interviewer_id')->get() 

Das einzige Problem dabei ist, ich weiß nicht genau, was ist Ihr IntPayments Tabellenname ist.

+0

Stattdessen Tabellennamen zu verwenden, ich bin das Abrufen der Daten mit dem Modell –

+0

Dies ist eine einfache leftJoin, es kein Problem in diesem Fall ist, aber Sie können diese links definieren als Join Modellbeziehung. –

+0

Aber Ihre Antwort bekommt mir die Daten aus der Tabelle USER. Aber ich möchte nur die Spalte Name aus dieser Tabelle und die Daten von IntPayments ist meine erste Priorität. Sieh dir das an. Sie werden das Szenario besser verstehen http://stackoverflow.com/questions/42129360/merging-different-table-data-into-same-array-in-laravel –

3

Try $inters in Array Rückkehr:

foreach ($int_payment as $inter) { 
     $inters[] = User::where('id',$inter->interviewer_id)->get(); 
    } 
return $inters; 

jedoch Einrichten Beziehung zwischen User und IntPayment Modellen wird viel einfacher sein, diese Art von Situation zu handhaben. Siehe in doc Eloquent relationship.

+0

Aber Ihre Antwort bekommt mir die Daten aus der Tabelle USER. Aber ich möchte nur die Spalte Name aus dieser Tabelle und die Daten von IntPayments ist meine erste Priorität. Sieh dir das an. Sie werden das Szenario besser verstehen http://stackoverflow.com/questions/42129360/merging-different-table-data-into-same-array-in-laravel –

+0

@NaveenKumar lernen und verwenden [Eloquent Beziehung] (https: // laravel.com/docs/5.4/eloquent-relationships) anstatt sogar so zu versuchen. Mit Beziehungsaufbau wird es nur ein Schritt und eine Abfrage sein, um zu erreichen, was Sie wollen –

+0

okay danke @sanzeeb. Ich werde anfangen zu lernen –

0

Verwenden Sie einfach Laravel Modell Beziehung das Leben leichter zu machen:

Machen Sie User Modell haben:

public function intpayments(){ 
    $this->hasMany(IntPayments::class, 'interviewer_id'); 
} 

Dann wird Ihr IntPayments Modell haben:

public function user(){ 
    $this->belongsTo(User::class, 'interviewer_id'); 
} 

So Sie kann leicht das gleiche Ergebnis erhalten mit:

$inters = IntPayments::where('month',$month_year)->load('user'); 

Dann können Sie eine Schleife durch dieses Ergebnis die Felder, um Sie sagen müssen:

$result = []; 
    foreach($inters as $inter) 
    { 
     $result[] = $inter->user->name; 
    } 
return $result; 

AKTUALISIERT:

Aber ich möchte nur den Namen Spalte aus der Tabelle und die Daten von IntPayments ist meine erste Priorität

Okay, so dass Sie immer noch die gleichen r verwenden können eiter kehrte aus der Abfrage:

$result = []; 
    foreach($inters as $k => $inter) 
    { 
     $result[$k]['name'] = $inter->user->name; //this is the user's name 
     $result[$k]['id'] = $inter->id; //this is intPayments's id 
     $result[$k]['interviewer_id'] = $inter->interviewer_id; //this is intPayments interviewer's 'id 
     ...... 
    } 

Vielleicht wissen Sie nicht, das Ergebnis aus der $inters Variable würden Sie zuerst geben, jeden Datensatz aus IntPayments dann mit dem User für jeden von ihnen.

Das bedeutet, dass inters natürlich aussehen wird (wenn ich die Antwort als json senden):

[ 
    { 
    "id": 1, 
    "candidate_id": "1", 
    "interviewer_id": "3" 
    "user": { 
     "id": 1, 
     "name": "second last", 
     "email": "[email protected]", 
    } 
    }, 
    { 
    "id": 2, 
    "candidate_id": "1", 
    "interviewer_id": "5", 
    "user": { 
    "id": 1, 
     "name": "first last", 
     "email": "[email protected]", 
    } 
    }, 
    ..... 
] 

Dies bedeutet, dass Sie diese Antwort verwenden können, wie Sie möchten und Zugriff auf die Felder, die Sie wollen.

this helps :)

+0

Aber Ihre Antwort bekommt mir die Daten aus der Tabelle USER. Aber ich möchte nur die Spalte Name aus dieser Tabelle und die Daten von IntPayments ist meine erste Priorität. Sieh dir das an. Sie werden das Szenario besser verstehen http://stackoverflow.com/questions/42129360/merging-different-table-data-into-same-array-in-laravel –

+0

Ich aktualisiere meine Antworten, die Sie überprüfen können .... –

Verwandte Themen