目錄
Laravel 5框架学习之日期,Mutator 和 Scope,laravelmutator
Write a New Article
首頁 後端開發 php教程 Laravel 5框架学习之日期,Mutator 和 Scope,laravelmutator_PHP教程

Laravel 5框架学习之日期,Mutator 和 Scope,laravelmutator_PHP教程

Jul 13, 2016 am 09:57 AM
日期

Laravel 5框架学习之日期,Mutator 和 Scope,laravelmutator

在我们前面的解决方案中,直接给 published_at 赋值为当前日期实际上是一个临时解决方案,我们需要设定发布日期,可能是未来2天后才发布,让我们修改这个问题。

首先修改控制器:

  public function store() {
    Article::create(Request::all());
    return redirect('articles');
  }
登入後複製

然后修改视图,添加发布日期字段

@extends('layout')

@section('content')
  <h1 id="Write-a-New-Article">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

登入後複製

ok,让我们添加一个新的文章,并且把日期设置为未来的某一天,但是文章直接显示在最开始了,这不是我们需要的。我们需要到了那天才显示出来。当然,我们需要更具体一点,比如在早上 8:00 显示,而不是0点显示。我们可以添加一个mutator(也就是其他语言的属性设置器),修改我们的model

<&#63;php namespace App;

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

class Article extends Model {

 protected $fillable = [
    'title',
    'body',
    'published_at'
  ];

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

}

登入後複製

添加一个新的纪录,查看数据库,我们已经将时间设置正确了,但是我们的首页仍然显示未来的才发布的文章,我们修改它。

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

    return view('articles.index', compact('articles'));
  }

登入後複製

上面的解决方法可以工作,但是查询语句太长了。我们可以使用 Laravel 提供的 scope ,来简化我们的工作。所谓scope可以理解为是查询过程中使用的中间查询结果,比如我们定义一个published scope,他可以返回所有当前已经发布的文章,让我们修改模型。

  //设置scope,遵守命名规则
  public function scopePublished($query) {
    $query->where('published_at', '<=', Carbon::now());
  }
登入後複製

修改控制器使用 scope

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

    return view('articles.index', compact('articles'));
  }

登入後複製

结果相同,但在复杂的查询中我们可以使用scope来分解我们的任务,或者复用查询。

我们来增加一个新的查询,查询所有还没有发布的文章。在模型中添加scope

  public function scopeUnpublished($query) {
    $query->where('published_at', '>', Carbon::now());
  }
登入後複製

修改控制器使用unpulished

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

    return view('articles.index', compact('articles'));
  }

登入後複製

one more thing! 如果我们在 show 方法中使用 dd($article->published_at) 查看的结果,与 dd($article->created_at); 结果不一样,前者我们使我们自己的字段,后者是在 CreateArticleTable 中通过 $table->timestamp() 自动生成的。自动生成的字段显示出来是 Carbon类型,而我们的是字符串。使用 Crabon类型有很多的好处,例如你可以输出 dd($article->created_at->diffForHumans()); ,这种 1 hour ago 结果,但我们的published_at 不可以。怎么修改?修改模型,告诉laravel,published_at 是日期即可。

  protected $dates = ['published_at'];
登入後複製

再次使用 dd($article->published_at->diffForHumans()); ,结果显示为 3 days from now,Bingo!

以上所述就是本文的全部内容了,希望能够给大家学习Laravel5框架有所帮助。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/980210.htmlTechArticleLaravel 5框架学习之日期,Mutator 和 Scope,laravelmutator 在我们前面的解决方案中,直接给 published_at 赋值为当前日期实际上是一个临时解决方案...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1273
29
C# 教程
1252
24
微博怎麼能按日期找以前的微博_微博按日期找以前的微博方法 微博怎麼能按日期找以前的微博_微博按日期找以前的微博方法 Mar 30, 2024 pm 07:26 PM

1.先開啟手機網路瀏覽器,搜尋微博網頁版,進入後點選左上角頭像按鈕。 2、然後點選右上角設定。 3.點選設定裡面的版本切換選項。 4.接著在版本切換裡選擇彩版選項。 5.點選搜索,進入搜尋頁面。 6.輸入關鍵字後,點選找人。 7.出來的搜尋完成介面點選篩選。 8.最後在發佈時間欄輸入特定日期後,點選篩選即可。

PPT講義列印自動出現的日期進行去除的操作方法 PPT講義列印自動出現的日期進行去除的操作方法 Mar 26, 2024 pm 08:16 PM

1.先說說我剛開始用的方法,或許大家也在用。先是打開【視野】——】備註模版【。 2.打開後確實能看到日期的地方。 3.先選擇它,並把它刪除。 4.刪除後點選【關閉母版檢視】。 5.再開啟列印預覽,發現日期還是在。 6.其實這個日期不是在這個地方刪除的。應該是在【講義母版】那裡。看下圖。 7.找到日期後把它刪除。 8.現在在打開預覽看一下,就沒有這個日期了。註:其實這個方法也很容易記,因為印刷的是講義,所以應該找【講義母版】。

如何使用Python產生兩個日期之間的k個隨機日期? 如何使用Python產生兩個日期之間的k個隨機日期? Sep 09, 2023 pm 08:17 PM

產生隨機數據在數據科學領域非常重要。從建構神經網路預測、股市數據等來看,通常都會將日期當作參數之一。我們可能需要在兩個日期之間產生隨機數以進行統計分析。本文將展示如何產生兩個給定日期之間的k個隨機日期使用隨機和日期時間模組日期時間是Python內建的處理時間的庫。另一方面,隨機模組有助於產生隨機數。因此,我們可以結合隨機和日期時間模組來產生兩個日期之間的隨機日期。語法random.randint(start,end,k)這裡的random指的是Python隨機函式庫。 randint方法採用三個重要的

超全! Python取得某一日期是「星期幾」的六種方法! 超全! Python取得某一日期是「星期幾」的六種方法! Apr 19, 2023 am 09:28 AM

在Python進行資料分析時,依照日期進行分組匯總也是被需要的,例如會找到銷量的周期性規律。那麼在用Python進行資料統計之前,就需要額外增加一步:從指定的日期當中取得星期幾。例如2022年2月22日,還剛好是正月廿二星期二,於是乎這天登記結婚的人特別多。本文以2022-02-22為例,示範Python取得指定日期是「星期幾」的6種方法! weekday()datetime模組是一個Python內建函式庫,無需再進行pip安裝,它除了可以顯示日期和時間之外,還可以進行日期和時間的運算以及格式化。

excel打日期變成井號怎麼辦 excel打日期變成井號怎麼辦 Mar 20, 2024 am 11:46 AM

excel軟體有非常強大的數據處理功能,我們經常用excel軟體來處理各種數據,有時我們在excel單元格中輸入日期的時候,excel打日期變成井號了,那怎麼能正常顯示數據呢?下面讓我們一起來看看解決的方法吧。 1.首先我們把滑鼠放在AB列之間的列寬線,雙擊以後調整列寬,如下圖所示。  2.列拉寬後,我們發現單元格內顯示的是數字,而不是日期,這肯定是不正確的,那我們就應該檢查一下單元格的格式了,如下圖所示。  3.點選“開始”標籤內的“數值”選項,點選下拉選單內的“其他數字格式”,如下圖所示。

Ubuntu17.10頂欄怎麼顯示日期與計秒? Ubuntu17.10頂欄怎麼顯示日期與計秒? Jan 08, 2024 am 10:41 AM

Ubuntu17.10頂欄預設只有目前的時間,沒有日期,想要顯示日期,該怎麼辦呢?下面我們就來看看詳細的教學。 1.在啟動器開啟終端,或按[Ctrl+Alt+T]2、終端輸入:sudoaptinstallgnome-tweak-tool3、安裝完成之後,開啟tweak工具4、點選TopBar5、Date就是日期,seconds就是秒數6、設定好之後,頂欄的時間上就顯示了日期,以及秒

如何使用Python中的時間和日期模組 如何使用Python中的時間和日期模組 Oct 16, 2023 am 08:11 AM

如何使用Python中的時間和日期模組導言:在程式設計中,處理時間和日期是非常常見的任務。 Python提供了強大的時間和日期模組,使得處理時間和日期的操作變得更加簡單和方便。本文將介紹Python中的時間和日期模組,並提供具體的程式碼範例,幫助讀者更好地理解和應用它們。一、引入時間和日期模組Python內建的時間和日期模組是datetime模組,我們需要先引入該模

PHP資料過濾:處理日期和時間輸入 PHP資料過濾:處理日期和時間輸入 Jul 28, 2023 pm 07:41 PM

PHP資料過濾:處理日期和時間輸入概述:在開發網頁應用程式時,經常需要處理使用者輸入的日期和時間資料。由於使用者的輸入可能存在各種格式和錯誤,因此必須進行有效的資料過濾和驗證,以確保資料的準確性和安全性。本文將介紹如何使用PHP來處理日期和時間輸入,並提供對應的程式碼範例。過濾和驗證原則:在處理日期和時間輸入之前,首先需要確定相應的過濾和驗證原則。以下是一些常見的

See all articles