2017-01-19 8 views
2

Ich habe die Beziehungen eingerichtet (richtig denke ich) .. Ich habe 3 Tabellen, Benutzer, Kommentare und Kommentare likes Tabelle.Überprüfen, ob die Sammlung einen Wert enthält

In meiner Klinge, kann ich {{ $comment->commentLikes }} mit diesem Zugang und es ist mir zurückschicken:

[{"id":85,"comment_id":12,"user_id":1,"action":1}, 
{"id":86,"comment_id":12,"user_id":3,"action":1}, 
{"id":87,"comment_id":12,"user_id":4,"action":1}, 
{"id":88,"comment_id":12,"user_id":6,"action":1}, 
{"id":89,"comment_id":12,"user_id":9,"action":1}] 

user_id Besitzer dergleichen darstellt.

Jetzt möchte ich überprüfen, ob diese Sammlung den authentifizierten Benutzer hat, mit anderen Worten, ob der aktuelle Benutzer diesen Kommentar mochte oder nicht. Gibt es eine Möglichkeit, das zu tun, anstatt eine for-Schleife zu verwenden? Vielleicht kann so etwas wie {{ $comment->commentLikes->owner }} so dass ich

verwenden 'wenn (this) enthält Auth::user->id()' ...

Antwort

0

Eine Möglichkeit, dies zu überprüfen, wird mit where() und first() Erhebungsmethoden:

if ($comment->commentLikes->where('user_id', auth()->user()->id)->first()) 
0
// This works if $comment->commentLikes returns a collection 
$userLikes = $comment->commentLikes->where('user_id', Auth::user()->id)->all(); 

if ($userLikes->count() > 0) { 
    // Do stuff 
} 
0

Option 1

Verwendung Laravel collection Sie können dies tun:

$comment->commentLikes->search(function ($item, $key) { 
    return $item->user_id == auth()->user()->id; 
}); 

Diese false zurück, wenn keine gefunden wird oder ein Index, wenn der Benutzer in der Sammlung ist.

machen es ziemlich

Aber da du wahrscheinlich diese in einer Ansicht verwenden werden, würde ich es in einem accessor, so etwas wie dieses Paket:

class Comment extends Model 
{ 
    public function commentLikes() { 
     // relationship defined 
    } 

    public function getHasLikedAttribute() 
    { 
     // use getRelationValue so it won't load again if it was loaded before 
     $comments = $this->getRelationValue('commentLikes'); 

     $isOwner = $comment->commentLikes->search(function ($item, $key) { 
      return $item->user_id == auth()->user()->id; 
     }); 

     return $isOwner === false ? false : true; 
    } 
} 

Auf diese Weise können $comment->has_liked nennen können, die wird true zurückgeben, wenn der aktuell angemeldete Benutzer in der Beziehung commentLikes oder false ist, wenn er nicht ist.

0

Verwendung:

if ($comment->commentLikes()->where('user_id', auth()->user()->id)->count() > 0) 

Dies ist effiziente als andere Antworten gepostet, weil sowohl die where() und die Zahl() auf dem Objekt Query Builder gelten anstelle der Sammlung

Verwandte Themen