2017-12-18 9 views
0

Ich habe Beiträge und diese Beiträge können von Benutzern gespeichert werden, um später zu lesen. Ich habe diese Beziehung erstellt und kann sie leicht speichern oder löschen. Das Problem ist, dass ich nicht überprüfen kann, ob der Post im Frontend gespeichert ist oder nicht. Jetzt habe ich einen Code geschrieben, aber das scheint nicht zu funktionieren. hier ist mein Controller-Code:Laravel versucht zu überprüfen, ob der Benutzer eine Beziehung mit dem Beitrag hat

$articleFlag = 1; 
$userID = Auth::User()->id; 

if (count($bestarticles) > 0) { 
    foreach ($bestarticles as $bestarticle) { 
     $saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle); 

     if (count($saveddata) > 0) { 
      $articleFlag = 1; 
     } else { 
      $articleFlag = 2; 
     } 
    } //foeach endes here 
} //first if endes here 

und als ich die $articleFlag zur Ansicht übergeben, als es Wert mit einem if Kontrolle Aber das Problem ist, egal was ich if (count($bestarticles) > 0) kehrt wahr machen und ich Wert 1 in Sicht . Hat jemand eine Idee, was ich vermisse?

Hier ist mein Benutzer-Controller relationshio:

function savedarticle(){ 
    return $this->belongsToMany('App\User', 'savearticle', 'user_id', 
    'article_id'); 
    } 

und hier geht die Funktionen, die ich verwenden für das Speichern und Löschen:

function savethearticle(Article $article){ 
    $this->savedarticle()->syncWithoutDetaching([$article->id]); 
} 
function removethearticle(Article $article){ 
    $this->savedarticle()->detach([$article->id]); 
} 

Aber es gibt nichts, was man sich Sorgen machen müssen. Ich kann löschen und hinzufügen.

Oder gibt es eine andere Möglichkeit, nach bestehenden Beziehungen zu suchen oder eine bessere Möglichkeit, sie im Controller zu überprüfen und in Sicht zu bringen?

Ich benutze Laravel 5.4.

+0

danke für die besser lesbar. Mein Braind funktioniert heutzutage nicht besonders gut:/ – Nikonah

+0

Kannst du deine 'User'- und' Article'-Modelle posten, so können wir die Beziehungen zwischen ihnen sehen. – fubar

+0

@fubar Ich habe es hinzugefügt. Aber ich kann schon löschen und hinzufügen, da gibt es kein Problem damit. Ich kann die Schaltfläche Speichern oder Löschen nicht anzeigen, je nachdem, ob der Benutzer den Beitrag bereits gespeichert hat oder nicht – Nikonah

Antwort

1

Es sieht aus, als ob Sie eine Collection von Article Modelle haben, und Sie versuchen, zu bestimmen, ob es in die User oder nicht verwandt ist.

Wenn das der Fall ist, würde ich empfehlen, laden Sie die User Beziehung, wenn Sie die Article Modelle ursprünglich abfragen. Dies hat den Vorteil, dass nur eine Abfrage zum Laden der Beziehung verwendet wird und nicht eine pro Article.

$userId = Auth::id(); 

$articles = Article::with(['savedarticle' => function ($query) use ($userId) { 
    return $query->where('user_id' => $userId); 
}])->get(); 

Mit diesem Collection, weil wir speziell die derzeit authentifizierten User geladen haben, können Sie dann gehen, dass zu wissen, ob die savedarticle Beziehung eine count von 1 hat, dass die User Beziehung besteht.

foreach ($articles as $article) { 
    if ($article->savedarticle->count()) { 
     // User has already saved article 
    } else { 
     // User has not saved article 
    } 
} 
+0

Das sieht aus wie die sensible Art und Weise zu gehen, ich werde es versuchen und wird als richtige Antwort markieren, wenn es funktioniert – Nikonah

+0

Ich musste damit ein bisschen spielen, funktioniert gut – Nikonah

+0

Gern geschehen. – fubar

1

Sollten Sie die ID von bestarticle in der Where-Klausel nicht übergeben? Außerdem erfordert es ein -> get(), um die Anforderung tatsächlich an die Datenbank auszulösen und die Abfrage auszuführen.

$saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle); 

Sollte

sein
$saveddata = DB::table('savearticle')->where('user_id', $userID && 'article_id', $bestarticle->id)->get(); 
+0

Ja, ich denke, ich habe das verpasst, funktioniert aber immer noch nicht. – Nikonah

+0

Immer noch den Wert 1 in Sicht, was bedeutet, dass der Beitrag gespeichert wird, wenn es nicht actuallt ist – Nikonah

+0

Ich würde hinzufügen, -> get() zu dieser Zeile, dann folgen Sie ihm mit einem dd ($ saveddata), um zu sehen, warum die Anzahl größer ist als Null, wenn Sie erwarten, dass es Null ist.Was wird zurückgegeben? –

Verwandte Themen