загружать статьи с включенными тегами группы - PullRequest
0 голосов
/ 19 сентября 2018

Я хотел бы показать в группе все статьи, которые имеют те же теги, что и группа.Например:

В группе есть теги: laravel, php, html.Тогда я бы хотел, чтобы все статьи имели одинаковые теги.Таким образом, все статьи с тегами laravel, php, html.

Не все статьи с одним и тем же тегом, только статьи с одинаковыми тегами.$ tagIdArray - это теги группы.

Я пробовал этот код:

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

Tag Model

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

Taggable Model

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

EDIT:

Например, если я показываю все группы и хочу использоватьслучайное изображение articel как групповое изображение.Как мне лучше всего это реализовать?

@foreach ($groups as $group)
{{$group->name}}                      
<img src="-----load random picture from articles that is in this group------" alt="" />
@endforeach

1 Ответ

0 голосов
/ 19 сентября 2018

Следующие действия помогут:

$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 () позволяет фильтровать только модели, имеющие связанную модель (1-й аргумент), которые соответствуют ограничениям, определенным обратным вызовом (2-й)аргумент).

В дополнение к этому, вы можете сказать, сколько связанных моделей, соответствующих заданным ограничениям, должно иметь возвращаемая модель - это то, что делают 2 последних аргумента.Приведенный выше код вернет статьи, которые содержат по крайней мере все теги с идентификаторами в $ tagIdArray - в него также войдут статьи, которые содержат больше тегов, чем предоставлено 3.Если вы хотите вернуть статьи, которые имеют все и только теги, указанные в $ tagIdArray , замените оператор > = на = .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...