【问题标题】:Check if user liked post Laravel检查用户是否喜欢 Laravel 的帖子
【发布时间】:2016-07-31 16:39:32
【问题描述】:

我需要检查用户是否喜欢该帖子并且不再喜欢它。问题是,当一个用户喜欢这篇文章时,我的代码不能让另一个用户喜欢它。我不知道为什么。

控制器:

    $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');
}

点赞.php:

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

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

用户.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

【问题讨论】:

  • 您实际上想用控制器中的代码实现什么。你的 $like 变量似乎被覆盖了
  • 我有“喜欢”表,属于“user_id”,“post_id”,我想检查“user_id”是否与“post_id”在同一行,然后不要让喜欢的帖子。
  • 如果他/她已经喜欢了帖子,您想限制用户喜欢帖子。对吗?
  • 是的,没错! :D
  • 那么为什么要嵌套循环呢?使用循环是否有任何特定目的。我的意思是你可以简单地通过使用 post_id 和 user_id 来完成。

标签: php laravel


【解决方案1】:

不要在控制器中执行循环。在视野中做(刀片)

编辑的控制器

$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]);

查看

@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

【讨论】:

  • 我明白了:Argument 1 passed to Illuminate\Database\Grammar::columnize() must be of the type array, string given
  • 你从哪一行得到这个?
  • 它不显示。但它写道:at Grammar-&gt;columnize('post_id') in Grammar.php line 121
  • 它有效! :) 谢谢
【解决方案2】:

如果您想检查 Auth 用户是否喜欢帖子,我就是这样做的。
Post.php

class Post extends Model{
   public function likes(){
      return $this->hasMany(Like::class);
   }
   public function isAuthUserLikedPost(){
      return $this->likes()->where('user_id',  auth()->id())->exists();
   }
}

评论.php

class Comment extends Model{
    public function post(){
        return $this->belongsTo(Post::class);
    }
}

在您看来,您可以用作:

{{ $post->isAuthUserLikedPost() ? 'do-something' : 'do-something else' }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多