Level 104
Logically grouping the when constraints will give you the expected query:
Topic::with( [ 'user', 'topicCategory', 'tagLanguage', 'tagEnvironment' ] )
->where(function ($builder) {
$builder
->when($selectedLanguageTagIds, fn($query) => $query->whereHas('tagLanguage', fn($q) => $q->whereIn( 'id', $selectedLanguageTagIds)))
->when($selectedEnvironmentTagIds, fn($query) => $query->orWhereHas('tagEnvironment', fn($q) => $q->whereIn( 'id', $selectedEnvironmentTagIds)));
})
->when( $CheckArray, fn( $query ) => $query->where('check_topic', '=', 1))
->get()
1 like