2016-07-09 5 views
-1

ユーザーが「好き」の投稿を同じユーザーがもう一度好きにすることができないようにする必要があります。これは私が現在やろうとしていることです:ifステートメントを修正する必要がある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(); 
    } 
} 

このクエリでは、同じ投稿を複数回好きになることがあります。誰かが何らかのコードを提案できるでしょうか?

答えて

1

Laravelの関係を少し時間をかけて読んでみると、このような状況では本当に役に立ちます。

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(); 
} 

このコードは、渡された$idが有効な投稿であることを前提としています。

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(); 
} 
関連する問題