Mit Laravel 5.2 habe ich eine Anwendung, die sowohl webbasiert ist und eine API bereitstellt. API-Anfragen werden mit dem Token-Guard authentifiziert, während Web-Anfragen mit dem Session-Guard authentifiziert werden. Ich möchte in der Lage sein, Datumsangaben so zu mutieren, dass sie als Unix-Zeitstempel für API-Aufrufe und als Standarddatumszeichenfolge (Y-m-d) für Web-Aufrufe zurückgegeben werden. Das Beste, was ich mir vorstellen konnte, ist ein separates Modell für API-Aufrufe, aber ich entdeckte schnell, dass dies zu Problemen mit polymorphen Beziehungen führt. Hat jemand einen Vorschlag, wie das zu erreichen ist?laravel muate date nur für api call
Antwort
Sie konnten die Serialisierung JSON verwenden, um eine neue Eigenschaft hinzuzufügen, die das Datum, wie Sie wollen formatiert werden bieten.
https://laravel.com/docs/master/eloquent-serialization#appending-values-to-json
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
protected $appends = ['my_date'];
/**
* Format date for API calls.
*
* @return string
*/
public function getMyDateAttribute()
{
return $this->attributes['created_at'] == // format Carbon date here.
}
}
dann werden Sie eine neue my_date
Eigenschaft in der von der API-Aufruf zurück JSON haben.
Sie könnten eine Funktion in Ihrem Modell einfügen, die dieses Attribut so formatiert, wie Sie es formatieren möchten.
public function formatDateForView()
{
return date('Y-m-d', $this->attributes['your_timestamp_field']);
}
Und Ihrer Meinung nach, rufen Sie es, wenn Sie es brauchen.
{{ $yourModel->formatDateForView(); }}
Ich sehe, was Sie meinen, das ist das Gegenteil von dem, was ich bin, da es eine Möglichkeit bietet, nur für die Web-Seite zu mutieren. Idealerweise würde ich gerne das Standardformat in der Datenbank behalten und nur für API-Aufrufe mutieren. – dsuelzle
Ich denke, dies ist die beste Lösung für das Problem, da es das Standard-Datumsformat in der Datenbank mit dem Nachteil der Rückgabe von zwei verschiedenen Formaten in der zurückgegebenen JSON verwaltet. Wenn dies ein Problem ist, kann das Hinzufügen des unnötigen Datums zu dem versteckten Array eine Auflösung sein. Vergessen Sie auch nicht, für jeden, der dies liest, das $ anhängige Array zum Modell hinzuzufügen. Für das obige Beispiel 'protected $ appends = [' my_date '];' sollte arbeiten. – dsuelzle
ah, '$ anhängt' - das habe ich vergessen. Meine Antwort wurde aktualisiert. – swatkins