2017-12-12 5 views
2

bekommen Mein Problem mit dem Kommentierer ist, dass ich die Benutzer-ID speichern, wenn es kommentiert und ich alle Kommentare unter dem Beitrag zurückgeben, aber wenn ich versuche, den Benutzernamen auch zurückgeben, gibt Laravel ein Fehler, ich denke es ist, weil es nicht weiß, für welche Benutzer-ID es den Benutzernamen aus der Benutzer-Tabelle zurückgeben sollte. Derzeit ist die Steuerung für Kommentare ist wie folgt:Laravel müssen Benutzernamen von jedem Kommentar

$comments = DB::select("Select * from comments where article_id = $articleID"); 

ich die $articleID die Strecke in orther vie den Artikelinhalt aus der Datenbank zu finden und ich benutze es in Kommentare Tabelle als auch die Kommentare zu finden, gehören zu den spezifischen Artikel. Aber wenn ich zum Beispiel versuchen,

$commenter = User::where('id', $comments->user_id)->first(); 

schlägt es fehl. Ich habe ein paar Versionen dieses Typs SQL-Befehle versucht, aber nicht funktioniert. Weil es nicht weiß, von welchem ​​Kommentator ich rede (schätze ich). Hast du eine Idee, wie ich das machen kann?

+0

Ich denke, das erste, was Sie tun müssen, ist rufen Sie 'get()' auf Ihrem 'DB :: select()'. Also wäre es '$ comments = DB :: select (" Wähle * aus Kommentaren wo article_id = $ articleID ") -> get();' Dann denke ich, dass du eine Sammlung erhalten würdest, kein Kommentarobjekt, also du müsste das Array iterieren, das '$ commenter = User :: find ($ comments-> user_id) aufruft -> get();' – flip

+0

ohhh ja, das weiß ich. Ich habe diesen Code nur für einen geschrieben. Ich habe viele Dinge aus Laravel und Mysql ausprobiert. es fühlt sich an, als würde der Controller verwirrt den richtigen Benutzer abholen – Nikonah

Antwort

4

Sie müssen eine foreach dafür verwenden. Wenn Sie den Benutzer für jeden Kommentar benötigen, sollten Sie die Kommentare durchlaufen, um dies zu erreichen. Ex:

$comments = DB::select("Select * from comments where article_id = $articleID"); 

foreach ($comments as $comment) { 
    $commenter = User::where('id', $comment->user_id)->first(); 
} 

Wenn Sie alle Benutzer erhalten möchten, die Kommentare in dem Artikel, sollten Sie versuchen, für Benutzer und nutzen die etablierten Beziehungen zu suchen. Die Hauptidee ist so etwas.

Im User-Modell Sie haben eine Beziehung mit Kommentaren zu setzen:

public function comments() 
{ 
    $this->hasMany(Comment::class); 
} 

Dann Sie whereHas diese Beziehungen mit zur Suche verwenden können:

$users = User::whereHas('comments', function ($q1) use ($articleId) { 
    $q1->where('article_id', $articleId); 
})->get(); 

haben diese Weise erhalten Sie eine Liste von allen Benutzern, die diesen Artikel kommentiert haben.

+0

Was kann ich alle Kommentatoren damit zurückgeben? es fühlt sich so an, als würde es scheitern, aber ich werde versuchen, – Nikonah

+0

Ich habe zusätzliche Informationen dazu hinzugefügt ... Bitte werfen Sie einen Blick. – Laerte

+1

Es funktionierte ziemlich gut. Danke für deine Antwort. – Nikonah

2

vergessen Sie einfach dieses ganze Zeug und gehen Sie wie folgt vor:

1) Benutzer Beziehung in Ihr Kommentar Modell hinzu:

function user(){ 
    return $this->belongsTo('App\Models\User','user_id','id'); 
} 

2) Dann, wie unten Ihre Kommentare erhalten:

$comments = Comments::where('artical_id',$articleID)->with('user')->get(); 

3) Dann erhalten Sie Benutzerobjekt in jedem Kommentarobjekt.

+0

Ich habe nie die Modelle Dinge in Laravel – Nikonah

+0

vollständig verstanden Ich habe versucht, die Funktion in Kommentare hinzuzufügen, aber '$ this' ist unterstrichen und es heißt *** Fuction Name muss aufrufbar sein *** – Nikonah

+0

Und was genau wird in der geschrieben werden Aussicht? Sicherlich wird {{$ comment-> username}} '' den Benutzernamen nicht sofort aus der users Tabelle zurückgeben, habe ich recht? – Nikonah

Verwandte Themen