2016-07-09 4 views
-1

Ich muss sicherstellen, dass wenn Benutzer "Likes" Beitrag kann nicht noch einmal vom gleichen Benutzer gemocht werden. Das versuche ich gerade:Notwendigkeit zu beheben, wenn Anweisung Laravel

public function liked($id) 
{ 
    $like = new Like(); 
    $post = Post::where('id', $id)->first(); 
    if($post->user_id != Auth::user()->id && $like->user_id != Auth::user()->id) { 
     $like->user_id = Auth::user()->id; 
     $like->post_id = $post->id; 
     $like->like = 1; 
     $like->save(); 
     return redirect()->back(); 
    } else { 
     return redirect()->back(); 
    } 
} 

Mit dieser Abfrage kann ich mehrmals den gleichen Beitrag mögen. Kann jemand Code vorschlagen?

Antwort

1

Nehmen Sie sich Zeit und lesen Sie Laravel-Beziehungen, sie sind wirklich hilfreich in Situationen wie diesem.

public function liked($id) 
{ 
    $uid = Auth::user()->id; 
    $likes = Like::where('post_id', $id) 
       ->where('user_id', $uid)->get(); 

    if ($likes->count() == 0) 
    { 
     $like = new Like; 
     $like->user_id = $uid; 
     $like->post_id = $id; 
     $like->like = 1; 
     $like->save(); 
    } 
    return redirect()->back(); 
} 

Hinweis: dieser Code nimmt die $id gebene auf einen gültigen Beitrag ist.

1
public function liked($id) 
{ 
    // find the post 
    $post = Post::find($id); 

    // the logged in user 
    $user = Auth::user(); 

    // user not allowed to like their own post 
    if ($post->user_id == $user->id) { 
     return redirect()->back(); 
    } 

    // search each like for the post 
    // if the user created the like, exit and redirect back 
    // (relationship must be defined in the models)   
    foreach ($post->likes as $like) { 
     if ($like->user_id == $user->id) { 
      return redirect()->back(); 
     } 
    } 

    // create and save the link 
    $like = Like::create([ 
     'user_id' => $user->id, 
     'post_id' => $post->id 
    ]); 

    return redirect()->back(); 
} 
Verwandte Themen