Shlop
@Shlop
Full Stack Developer (PHP/Laravel/JavaScript)

Как получить изображения пользователя по тегу?

Здравствуйте, подскажите пожалуйста. У меня есть модель изображений, и в ней метод
public function tags(): BelongsToMany
{
   return $this->belongsToMany(Tag::class);
}

У изображения может быть много тегов, у тега может быть много изображений.
И сейчас вот немного не понимаю как мне составить запрос, мне нужно вывести изображения по выбранному тегу.
Я сначала сделал такое, но это не срабатывает как ожидается.
В $request->tags - массив id выбранных тегов
$images = $user->images()->with(['tags' => function($query) use ($request) {
	if($request->has('tags')) {
		$query->whereIn('tags.id', $request->tags);
	}
}])->orderBy('id', 'desc')->paginate(15);


А вот так работает:
if($request->has('tags')) {
	$images = $user->images()->whereHas('tags', function (Builder $query) use ($request) {
		$query->whereIn('tags.id', $request->tags);
	})->orderBy('id', 'desc')->paginate(15);
}
else {
	$images = $user->images()->orderBy('id', 'desc')->paginate(15);
}


Но я вот думаю может можно как то по другому ещё сделать, подскажите пожалуйста, заранее благодарю за ответ.
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
$images = $user->images()
  ->when($request->has('tags'), function($q) use ($request) { 
      $q->whereHas('tags', function ($q) use ($request) {
         $q->whereIn('tags.id', $request->tags);
      })
  })
  ->orderBy('id', 'desc')->paginate(15);

Попробуй так
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы