Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [LR] Castowanie dat
markonix
post
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Mamy daty w formacie Y-m-d w bazie.
Chciałbym skorzystać z fajnego narzędzia jakim jest rzutowanie dat na obiekt Carbon'a.

Wszystko fajnie, w widokach ładnie korzystam z format() ale to samo chciałbym zrobić w API ponieważ domyślnie zwraca datę z godziną (00:00:00).
Więc myślę sobie, że po prostu zrobię:

  1. $object->date = $object->date->format('Y-m-d');


No i niby prosta rzecz ale gdy ten obiekt przesyłam za pomocą response()->json to znowu datę rzutuje na obiekt carbon i dostaje z zerami :/

Częściowo problem naprawia:

  1. protected function serializeDate(\DateTime $date)
  2. {
  3. return $date->format('Y-m-d');
  4. }


Ale to znów zmienia format pozostałych kolumn. Liczyłem, że Carbon jakoś rozpoznaje DATETIME i DATE i potem przy wyrzucaniu na ekran wybiera odpowiedniejszy format.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Ale w innych miejscach korzystam z dobrodziejstw tej nakładki więc nie chce wyłączać całkiem tego castowania dla tego jednego przypadku.

Nie umiem zrozumieć dlaczego jak przekazuje zmodyfikowany obiekt do response (sprawdzałem, po użyciu format dump wskazuje, że ->date to string) z powrotem to rzutuje na Carbona.
Jak np. usunę castowany atrybut (unset) to serializer zupełnie się wysypuje co dla mnie też jest troszkę dziwne bo czasem człowiek chce zmodyfikować dane zanim wyśle response.

edit: Chyba używam źle nazewnictwa bo casting to inna metoda. Korzystam z tego (mutator):
  1. /**
  2. * The attributes that should be mutated to dates.
  3. *
  4. * @var array
  5. */
  6. protected $dates = ['created_at', 'updated_at', 'expire'];


Jakieś pomysły? :/

Tak samo jak zrobię metodę getExpireAttribute w której mogę zmienić format ale znów to działa wszędzie i rzutuje już na string przez to tam gdzie chce już nie użyje metod Carbon (musiałbym ręcznie castować).
Tak więc jeżeli nie da się ustawić oddzielnie formatu dla json i innego dla array (dla widoków) to interesuje mnie jak to tego:
  1. return response()->json(['data' => $obj]);

przekazać zmodyfikowany obiekt. Mogę dodać do niego parametr, mogę nadpisać wszystkie ale z tym "expire" cokolwiek próbuje robić wraca do formatu z godziną :/

Ten post edytował markonix 12.06.2016, 20:34:52
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 18:06