[LR] Relacja z whereHas |
[LR] Relacja z whereHas |
25.03.2018, 20:37:15
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Powiedzmy, że mamy model artykuły i w nim:
A komentarz ma relację do autora. I teraz chciałbym przy każdym wywołaniu $article->comments wyświetlić komentarze tylko z autorem, który nie jest usunięty. Klucze obce rozwiązują fajnie sprawę ale mamy tu problematyczny softdeleting tak więc wyświetlają się komentarze także od ludzi, których w teorii już nie ma. Czy da się to osiągnąć na samym poziomie deklarowania relacji. Oczywiście znam metody whereHas lub filtrowanie kolekcji ale to już muszę robić świadomie i za każdym razem, a $article->comments jest w wielu miejscach w różnych kontekstach (np. $article->comments->count()). edit: To było prostsze niż myślałem. Nie sądziłem, że whereHas można wywołać na obiekcie Relacji ale można więc wystarczy: return $this->hasMany('App\Models\Comment')->whereHas('author'); Ten post edytował markonix 25.03.2018, 21:05:11 -------------------- |
|
|
26.03.2018, 06:50:25
Post
#2
|
|
Grupa: Zarejestrowani Postów: 673 Pomógł: 106 Dołączył: 31.12.2008 Ostrzeżenie: (0%) |
Przy okazji zamiast pisać:
To polecam robić to tak (łatwiejszy refactoring):
-------------------- |
|
|
28.03.2018, 01:03:10
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Rozumiem w pewnym stopniu zasadność takiej struktury, ale jakoś przejrzystszy (może krótszy po prostu) mi się wydaje string, w dokumentacji Laravel też taki format jest na przykładach.
Dużo nie tracę bo STORM także pozwala na nawigacje po takiej klasie wprowadzonej jako string (jedynie nie podpowiada przy wpisywaniu). Ten post edytował markonix 28.03.2018, 01:03:56 -------------------- |
|
|
28.03.2018, 08:07:37
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Uzywając notacji obiektowej możesz zaimportować namespace i zostanie Ci wtedy samo `Comment::class` co jest którtsze wg. Twojego argumentu
Kolejny ciekawy argument to jest taki że jeśli kiedyś ci się przytrafi autmoatyczna refaktoryzacja to bez problemu wyłapie takie miejsca i sobie edytor z tym poradzi, string nie koniecznie. Ale to wszystko raczej kosmetyczne zmiany. Ot po prostu przyjęło się używać notacji `::class` |
|
|
Wersja Lo-Fi | Aktualny czas: 28.03.2024 - 22:30 |