代码之家  ›  专栏  ›  技术社区  ›  slickness

加载包含组的标签的文章

  •  1
  • slickness  · 技术社区  · 6 年前

    例如:

    这个组有as标签:laravel、php、html。然后我想让所有的文章,其中有完全相同的标签。所以所有标签为laravel,php,html的文章。

    我试过这个代码:

     $tagIdArray = [2,3,4];
                    $article = Article::with('comments', 'tags')->whereIn('privacy', [1, 2])->where('status', 1)
                        ->where(function ($query) use ($tagIdArray) {
                            return $query->tags->pluck('id')->all() == $tagIdArray;
                        })
                        ->latest()->paginate(15);
    

    但我总是收到错误信息:

    Undefined property: Illuminate\Database\Eloquent\Builder::$tags
    

    后模型

      public function tags()
            {
                return $this->morphToMany('App\Tag', 'taggable')->withTimestamps();
            }
    

    标签型号

    public function taggable()
        {
            return $this->morphTo();
        }
    

    可标记模型

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

    编辑:

    例如,如果我显示所有组,并且我想使用文章的随机图像作为组图像。如何最好地实现这一点?

    @foreach ($groups as $group)
    {{$group->name}}                      
    <img src="-----load random picture from articles that is in this group------" alt="" />
    @endforeach
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   jedrzej.kurylo    6 年前

    $tagIdArray = [2,3,4];
    $article = Article::with('comments', 'tags')
      ->whereIn('privacy', [1, 2])
      ->where('status', 1)
      ->whereHas('tags', function($query) use ($tagIdArray) {
        $query->whereIn('id', $tagIdArray);
      }, '>=', count($tagIdArray))
      ->latest()
      ->paginate(15);
    

    whereHas()

    除此之外,您还可以说与给定约束匹配的相关模型应该有多少个返回的模型-这是最后两个参数所做的。上面的代码将返回至少包含所有ID为的标签的文章 $塔吉达里 >= = .