Heim > Backend-Entwicklung > PHP-Tutorial > Grundlagen von Laravel 5 (10) – Datum, Mutator und Umfang

Grundlagen von Laravel 5 (10) – Datum, Mutator und Umfang

WBOY
Freigeben: 2016-08-08 09:26:45
Original
853 Leute haben es durchsucht

In unserer vorherigen Lösung ist die direkte Zuweisung von „publicated_at“ tatsächlich eine vorübergehende Lösung. Wir müssen das Veröffentlichungsdatum festlegen, das möglicherweise erst 2 Tage in der Zukunft veröffentlicht wird.

Ändern Sie zuerst den Controller:

<code>    public function store() {
        Article::create(Request::all());
        return redirect('articles');
    }</code>
Nach dem Login kopieren

Ändern Sie dann die Ansicht und fügen Sie das Feld für das Veröffentlichungsdatum hinzu

<code>@extends('layout')

@section('content')
    <h1>Write a New Article</h1>

    <hr/>

    {{--使用我们添加的 illuminate\html 开源库--}}
    {!! Form::open(['url' => 'articles']) !!}
        <div class="form-group">
            {!! Form::label('title', 'Title:') !!}
            {!! Form::text('title', null, ['class' => 'form-control']) !!}
        </div>

        <div class="form-group">
            {!! Form::label('body', 'Body:') !!}
            {!! Form::textarea('body', null, ['class' => 'form-control']) !!}
        </div>

        <div class="form-group">
            {!! Form::label('published_at', 'Publish On:') !!}
            {!! Form::input('date', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!}
        </div>

        <div class="form-group">
            {!! Form::submit('Add Article', ['class' => 'btn btn-primary form-control']) !!}
        </div>

    {!! Form::close() !!}

@stop</code>
Nach dem Login kopieren

OK, fügen wir einen neuen Artikel hinzu und legen das Datum auf einen Tag in der Zukunft fest, aber der Artikel wird direkt am Anfang angezeigt, was wir nicht brauchen. Wir müssen es an diesem Tag zeigen. Natürlich müssen wir konkreter sein, z. B. die Anzeige um 8:00 Uhr morgens statt um 0 Uhr. Wir können einen Mutator (d. h. einen Eigenschaftssetzer in anderen Sprachen) hinzufügen und unser Modell ändern

<code><?php namespace App;

use DateTime;
use Illuminate\Database\Eloquent\Model;

class Article extends Model {

	protected $fillable = [
        &#39;title&#39;,
        &#39;body&#39;,
        &#39;published_at&#39;
    ];

    //属性设置其要遵守格式约定
    // set属性Attribute
    public function setPublishedAtAttribute($date) {
        $this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d', $date)->hour(8)->minute(0)->second(0);
    }

}</code>
Nach dem Login kopieren

Fügen Sie einen neuen Datensatz hinzu, überprüfen Sie die Datenbank, wir haben die Zeit richtig eingestellt, aber auf unserer Homepage werden weiterhin die in Zukunft veröffentlichten Artikel angezeigt, wir ändern sie.

<code>	public function index() {
        //$articles = Article::latest('published_at')->get();
        $articles = Article::latest('published_at')->where('published_at', '<=&#39;, Carbon::now())->get();

        return view('articles.index', compact('articles'));
    }</code>
Nach dem Login kopieren

Die obige Lösung funktioniert, aber die Abfrageanweisung ist zu lang. Wir können den von Laravel bereitgestellten Spielraum nutzen, um unsere Arbeit zu vereinfachen. Der sogenannte Bereich kann als Zwischenabfrageergebnis verstanden werden, das im Abfrageprozess verwendet wird. Wenn wir beispielsweise einen veröffentlichten Bereich definieren, kann dieser alle aktuell veröffentlichten Artikel zurückgeben, sodass wir das Modell ändern können.

<code>    //设置scope,遵守命名规则
    public function scopePublished($query) {
        $query->where('published_at', '<=&#39;, Carbon::now());
    }</code>
Nach dem Login kopieren

Ändern Sie den Controller, um den Bereich zu verwenden

<code>	public function index() {
        //$articles = Article::latest(&#39;published_at&#39;)->get();
        //$articles = Article::latest('published_at')->where('published_at', '<=&#39;, Carbon::now())->get();
        $articles = Article::latest('published_at')->published()->get();

        return view('articles.index', compact('articles'));
    }</code>
Nach dem Login kopieren

Das Ergebnis ist das gleiche, aber bei komplexen Abfragen können wir den Bereich nutzen, um unsere Aufgaben aufzuschlüsseln oder Abfragen wiederzuverwenden.

Fügen wir eine neue Abfrage hinzu, um alle Artikel abzufragen, die noch nicht veröffentlicht wurden. Fügen Sie dem Modell einen Bereich

hinzu
<code>    public function scopeUnpublished($query) {
        $query->where('published_at', '>', Carbon::now());
    }</code>
Nach dem Login kopieren

Ändern Sie den Controller so, dass er unpulished verwendet

<code>	public function index() {
        //$articles = Article::latest('published_at')->get();
        //$articles = Article::latest('published_at')->where('published_at', '<=&#39;, Carbon::now())->get();
        //$articles = Article::latest('published_at')->published()->get();
        $articles = Article::latest('published_at')->Unpublished()->get();

        return view('articles.index', compact('articles'));
    }</code>
Nach dem Login kopieren

Noch etwas! Wenn wir show in der dd($article->published_at)-Methode verwenden, unterscheidet sich das angezeigte Ergebnis vom dd($article->created_at);-Ergebnis. Bei ersterem erstellen wir unsere eigenen Felder und bei letzterem übergeben wir CreateArticleTable > Automatisch generiert. Das automatisch generierte Feld wird als Typ $table->timestamp() angezeigt, während unseres ein String ist. Die Verwendung des Crabon-Typs bietet viele Vorteile. Sie können beispielsweise Carbon und dieses dd($article->created_at->diffForHumans());-Ergebnis ausgeben, unser 1 hour ago jedoch nicht. Wie kann ich es ändern? Ändern Sie das Modell und teilen Sie Laravel mit, dass published_at das Datum ist. published_at

<code>    protected $dates = ['published_at'];</code>
Nach dem Login kopieren
Verwenden Sie

erneut und das Ergebnis wird als dd($article->published_at->diffForHumans());, Bingo, angezeigt! 3 days from now

Das Obige hat die Grundlagen von Laravel 5 (10) vorgestellt – Datum, Mutator und Umfang, einschließlich des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
gt
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage