Konwersja statusu z int na string

0

W bazie posiadam status na jakim etapie znajduje się dany projekt, np. 0 - nie rozpoczęty, 1 - w toku, 2 - zakończony.

W kontrolerze pobieram projekty zalogowanego usera

 $projects = User::find(Auth::user()->id)->projects;

Czy powinienem wyświetlać to w ten sposób w widoku?

@if($project->status == '0')
 <span class="label label-warning">Nie rozpoczęte</span>
@else

Czy powinien przed przekazaniem tego do widoku "przerobić", abym nie musiał już tego w widoku analizować? Jeśli tak to powinno to znaleźć się w serwisie czy controlerze?

W jaki sposób powinienem do tego podejść? Zrobić serwis, który będzie zwracał różne formy tego statusu?
Np. label status zwracałby status w formie

<span class="label label-warning">Nie rozpoczęte</span>

status text "Nie rozpoczęte"
etc.?

2

Nie musisz robić find. Auth::user() zwraca Ci zalogowanego użytkownika.

Ale do rzeczy. Podejść jest kilka. Jeżeli miałbyś statusy w bazie w formie tabeli słownikowej (id, name), to mógłbyś zrobić coś takiego:

$project->status->name

Możesz też użyć czegoś takiego https://github.com/laracasts/Presenter

0

Nie musisz robić find. Auth::user() zwraca Ci zalogowanego użytkownika.

Dzięki, poprawiłem sobie.

To już nie lepiej trzymać status w stringu od razu w tabeli projects?
Z przyzwyczajenia zrobiłem statusy jako int, być może tutaj większy sens miałby string?

0
SwateQ napisał(a):

To już nie lepiej trzymać status w stringu od razu w tabeli projects?
Z przyzwyczajenia zrobiłem statusy jako int, być może tutaj większy sens miałby string?

Pewnie, że nie jest lepiej. Słownik to słownik. Przykładowo jakbyś miał stronkę wielojęzyczną to co wtedy? Zrób tak jak podpowiedział kolega wyżej :)

0

Wtedy pewnie użyłbym tego

Pewnie zastosuję presentera tak jak podał Desu, po prostu analizuję ten przypadek i nie widzę minusów użycia stringa jako status (na razie).

0

Jak już to enum, ale i tak musiałbyś mapować. Nie wyobrażam sobie trzymać statusu i to po polsku w bazie. Nawet samo wyszukiwanie byłoby dużo wolniejsze bo indeksowany int jest szybszy niż string.

0
$statuses = ['info', 'warning', 'error', 'notice'];

$statusIndex = 3;

echo $statuses[$statusIndex];
0

Jednak robię w formie słownika w bazie, będę mógł dorobić do tego CRUD-a i ewentualnie w przyszłości tym łatwo zarządzać.
Dzięki Desu za naprowadzenie.

Btw. probowałem presenterem, ale wszystkie te libki są przestarzałe i larva mi sypała błędami, więc zrezygnowałem :(.

1 użytkowników online, w tym zalogowanych: 0, gości: 1