【问题标题】:Querying MorphToMany Relation Laravel查询 MorphToMany 关系 Laravel
【发布时间】:2020-06-26 04:26:57
【问题描述】:

我想从数据库中获取所有帖子的数据,这些数据将确定帖子是否被 auth()->user() 喜欢。很可能是通过计数。

应用\发布

public function likes()
{
    return $this->morphToMany('App\User', 'likeable');
}

应用\用户

public function likePosts()
{
    return $this->morphedByMany('App\Post', 'likeable')->withTimestamps();
}

点赞表

Likeables table has ('user_id', 'likeable_id', 'likeable_type')

我尝试使用 orWhereHas

$posts = Post::with( ['user', 'tags', 'category'])->orwhereHas('likes', function($q) {
                    $q->where('user_id', auth()->id());
                })->latest()->withoutTrashed()->paginate(10);

但是关于查询,我只能得到用户喜欢的那些帖子。我想获取所有帖子并检查用户是否喜欢该帖子

我遇到了 whereHasMorph,但它只适用于 morphTo 而不是 morphToMany。

【问题讨论】:

  • 你找到解决办法了吗?
  • @m_____ilk 是的,请检查下面的答案。

标签: php database laravel-5 eloquent


【解决方案1】:

@m____ilk 我能够解决这个问题,但创建了一个 mutator:

public function isLiked()
{
    return $this->likes()->where('user_id', auth()->id())->count() > 0;
}

我在帖子上运行了一个循环,并基于 mutator 将自定义属性附加到单个帖子。

$posts = Post::with( ['user', 'tags', 'category', 'post.user', 'post.tags', 'post.category'])->latest()->withoutTrashed()->paginate(10);

foreach ($posts as $post) {
    // Mutator Condition
    if ($post->is_liked) {
        // Custom Attribute
        $post->isLiked =  1;
    } else {
        $post->isLiked =  0;
    }
}
return $posts;

【讨论】:

  • 但在这种情况下,我认为您每次调用该函数时都在运行查询。我认为首先在查询用户时加入表格会更好。
  • 正确,我声称它是一个完美的解决方案。我的第一种方法是通过查询来解决它,但无法做到这一点,所以这种循环方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2021-04-05
  • 2013-10-03
  • 2017-07-19
  • 2021-05-27
  • 2020-03-16
相关资源
最近更新 更多