2016-07-31 13 views
1

Ich muss überprüfen, ob Benutzer den Beitrag mochte und nicht mehr mögen. Das Problem ist, dass ich mit meinem Code, wenn einer der Benutzer den Beitrag mag, kann ich es nicht mit einem anderen Benutzer mögen. Ich weiß nicht warum.Überprüfen, ob Benutzer Beitrag gefallen Laravel

Controller:

$posts = Post::orderBy('created_at', 'desc')->paginate(10); 
    foreach($posts as $p){ 
     foreach ($p->like as $like){ 
      $like = Like::where('user_id', '=', Auth::user()->id)->get(); 
     } 
    } 

post.php:

public function user(){ 
    return $this->belongsTo('App\User'); 
} 

public function like() 
{ 
    return $this->hasMany('App\Like'); 
} 

Like.php:

 public function user() 
{ 
    return $this->belongsTo('App\User'); 
} 

    public function post() 
    { 
     return $this->belongsTo('App\Post'); 
    } 

User.php:

public function post(){ 
    return $this->hasMany('App\Post'); 
} 

public function like(){ 
    return $this->hasMany('App\Like'); 
} 

HTML

   @if($like) 
        <i class="fa fa-thumbs-o-up liked pull-right" aria-hidden="true"></i> 
       @else 
        <a href="/like/{{$p->id}}"> 
         <i class="fa fa-thumbs-o-up likeBtn pull-right" aria-hidden="true"></i></a> 
       @endif 
+0

, was Sie tatsächlich versuchen, mit Ihrem Code in der Steuerung zu erreichen. Ihre $ like-Variable scheint überschrieben zu werden – jonju

+0

Ich habe "Likes" Tabelle Hexe gehört 'user_id ',' post_id 'und ich möchte überprüfen, ob' user_id 'in der gleichen Zeile wie' post_id 'existiert, dann lassen Sie sich nicht wie der Beitrag. – feknuolis

+0

Sie möchten den Benutzer davon abhalten, den Beitrag zu mögen, wenn er den Beitrag bereits gemocht hat. Recht? – jonju

Antwort

1

Machen Sie nicht die Schleife im Controller. Tun Sie es im Hinblick auf (Klinge)

Edited-Controller

$posts = Post::orderBy('created_at', 'desc')->paginate(10); 
$likes = Like::select('post_id')->where('user_id',Auth::user()->id)->get(); 
$likeArr=array_flatten($likes->toArray()); //convert multidimensional array to single array for easy access 
return view('yourview',['posts'=>$posts,'likes'=>$likeArr]); 

VIEW

@foreach($posts as $p) 
    @if(in_array($p->id,$likes)) 
     <i class="fa fa-thumbs-o-up liked pull-right" aria-hidden="true"></i> 
    @else 
     <a href="/like/{{$p->id}}"> 
      <i class="fa fa-thumbs-o-up likeBtn pull-right" aria-hidden="true"></i> 
     </a> 
    @endif 
@endforeach 
+0

Ich bekomme dies: 'Argument 1 übergeben Illuminate \ Database \ Grammar :: columnize() muss vom Typ Array, String gegeben sein" – feknuolis

+0

Welche Zeile haben Sie das bekommen? – jonju

+0

Es wird nicht angezeigt. Aber es schreibt: 'bei Grammar-> columnize ('post_id') in Grammar.php Zeile 121' – feknuolis

Verwandte Themen