搜尋
首頁後端開發php教程Laravel 5框架学习之日期,Mutator 和 Scope,laravelmutator_PHP教程

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
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模块,我们需要先引入该模

超全!Python获取某一日期是“星期几”的六种方法!超全!Python获取某一日期是“星期几”的六种方法!Apr 19, 2023 am 09:28 AM

在Python进行数据分析时,按照日期进行分组汇总也是被需要的,比如会找到销量的周期性规律。那么在用Python进行数据统计之前,就需要额外增加一步:从指定的日期当中获取星期几。比如2022年2月22日,还正好是正月廿二星期二,于是乎这一天登记结婚的人特别多。本文就以2022-02-22为例,演示Python获取指定日期是“星期几”的6种方法!weekday()datetime模块是一个Python内置库,无需再进行pip安装,它除了可以显示日期和时间之外,还可以进行日期和时间的运算以及格式化。

PHP数据过滤:处理日期和时间输入PHP数据过滤:处理日期和时间输入Jul 28, 2023 pm 07:41 PM

PHP数据过滤:处理日期和时间输入概述:在开发网页应用程序时,经常需要处理用户输入的日期和时间数据。由于用户的输入可能存在各种格式和错误,因此必须进行有效的数据过滤和验证,以确保数据的准确性和安全性。本文将介绍如何使用PHP来处理日期和时间输入,并提供相应的代码示例。过滤和验证原则:在处理日期和时间输入之前,首先需要确定相应的过滤和验证原则。以下是一些常见的

如何使用Python生成两个日期之间的k个随机日期?如何使用Python生成两个日期之间的k个随机日期?Sep 09, 2023 pm 08:17 PM

生成随机数据在数据科学领域非常重要。从构建神经网络预测、股市数据等来看,通常都会将日期作为参数之一。我们可能需要在两个日期之间生成随机数以进行统计分析。本文将展示如何生成两个给定日期之间的k个随机日期使用随机和日期时间模块日期时间是Python内置的处理时间的库。另一方面,随机模块有助于生成随机数。因此,我们可以结合随机和日期时间模块来生成两个日期之间的随机日期。语法random.randint(start,end,k)这里的random指的是Python随机库。randint方法采用三个重要的

MySQL中如何使用DATEDIFF函数计算两个日期之间的天数差MySQL中如何使用DATEDIFF函数计算两个日期之间的天数差Jul 13, 2023 am 08:00 AM

MySQL中如何使用DATEDIFF函数计算两个日期之间的天数差在MySQL数据库中,DATEDIFF函数可以方便地计算两个日期之间的天数差。这个函数接受两个日期作为参数,并返回它们之间的天数差。使用DATEDIFF函数的语法如下:DATEDIFF(date1,date2)其中,date1和date2是两个要比较的日期参数。这两个参数可以是日期类型的列名、

PHP日期处理技巧:快速确定某个日期的星期几PHP日期处理技巧:快速确定某个日期的星期几Mar 20, 2024 am 08:15 AM

PHP作为一种广泛应用于Web开发领域的编程语言,提供了丰富的日期处理函数,可以方便地对日期进行操作和计算。其中,快速确定某个日期是星期几是一个常见且实用的需求。本文将介绍如何利用PHP中的函数来快速确定某个日期的星期几,并提供具体的代码示例。PHP中日期处理函数简介PHP中关于日期处理的主要函数有date()、strtotime()、str

如何使用MySQL中的UNIX_TIMESTAMP函数将日期转换为时间戳如何使用MySQL中的UNIX_TIMESTAMP函数将日期转换为时间戳Jul 13, 2023 pm 12:00 PM

如何使用MySQL中的UNIX_TIMESTAMP函数将日期转换为时间戳时间戳是一个表示日期和时间的数字,它通常用于在计算机系统中存储和处理日期和时间。在MySQL中,可以使用UNIX_TIMESTAMP函数将日期转换为时间戳。本文将介绍如何使用UNIX_TIMESTAMP函数来实现这一转换。首先,我们需要了解UNIX_TIMESTAMP函数的用法。UNIX

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),