Filtrowanie danych po autorze wpisu i przypisanych użytkownikach

Filtrowanie danych po autorze wpisu i przypisanych użytkownikach
SS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 187
0

Cześć,
Mam listę wydarzeń gdzie dany użytkownik tworząc wydarzenie przypisuje do niego użytkowników a sam zapisywany jest jako autor.
Filtrowanie wydarzeń dla przypisanych użytkowników wygląda u mnie tak

Kopiuj
$data->whereHas('users', function ($users) use ($filters) {
  $users->where('user_id', $filters['user_id']);
});

i to ogólnie działa ok.
Jednak autor wydarzenia wcale nie musi być w jego uczestnikach więc jeśli doda wydarzenie nie widzi go u siebie na liście. Chciałbym, aby osoba która dodała wydarzenie widziała na liście zarówno wydarzenia w których jest wpisana jako użytkownik jak i te które utworzyła ale nie jest wpisana.
Próbowałem użyć orWhere jednak to nie dział a w zasadzie działa w taki sposób że są ignorowane inne filtry które są w zapytaniu np filtrowanie po mieście. Próbowałem zrobić coś takiego

Kopiuj
$data->whereHas('users', function ($users) use ($filters) {
  $users->where('user_id', $filters['user_id']);
})->orWhere('author_id', $filters['user_id']);

i to w zasadzie wyświetli również te w których jest autorem natomiast ignoruje wtedy inne filtry które normalnie działają np

Kopiuj
$data->where('city_id', $filters['city_id']);

Z góry dzięki za pomoc

CH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 449
0

Musisz zrobić to tak:

Tabela Users

id name
1 Czeslaw
2 Asia
3 Kubus

Teraz mam tabele wydarzen

id title
1 wydarzenie o kurczakach
2 wydarzenie o szkole

teraz powinna byc tabela z przypisaniem userow do wydarzenia

Teraz mam tabele wydarzenia_uzytkownicy

id id_event id_user role_symbol
1 1 1 owner
2 1 2 member
3 1 3 member

I wtedy mozesz wyszukac i poakzac na lisie wszystkie wydarzenia gdzie uzytkownik jest w tabeli wydarzenia_uzytkownicy i widzisz na liscie ze czy jestes jako member czy jako owner

SS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 187
0

Rozwiązanie działające przy mojej strukturze bazy

Kopiuj

$data->where(function ($q) use ($filters) {
           $q->whereHas('users', function ($users) use ($filters) {
               $users->where('user_id', $filters['user_id']);
           })->orWhere('author_id', $filters['user_id']);
        });

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.