我的Laravel学习之路之 模型方法queryScope 和字段设置setAttribute

来源:互联网 发布:淘宝男士服装店推荐 编辑:程序博客网 时间:2024/06/06 01:30

是这样的,发表时候,因为有一个帖子发表时间,可以自定发表时间,所以我们在发表页面添加html5显示时间样式

直接上代码,下面的 {!! Form::input('date','published_at',date('Y-m-d'),['class'=>'form-control']) !!}

@extends('app')@section('content')<div class="container"><h3>撰写新文章</h3>{!! Form::open(['url'=>'/articles']) !!}<div class="form-roups">{!! Form::label('name') !!}{!! Form::text('name',null,['class'=>'form-control']) !!}</div><div class="form-groups">{!! Form::label('content') !!}{!! Form::textarea('content',null,['class'=>'form-control']) !!}</div><div class="form-groups">{!! Form::label('published_at') !!}{!! Form::input('date','published_at',date('Y-m-d'),['class'=>'form-control']) !!}</div>{!! Form::submit('提交',['class'=>'btn btn-primary form-control']) !!}{!! Form::close() !!}</div>@stop

然后我们去在模型类中写一个字段设置

//模型函数,命名方法规则[set 字段名Atrribute]请使用驼峰命名法则    //createFromFormat 去查了一下是php5.3新增函数,满足各国时间格式的写法    public function setPublishedAtAttribute($date)    {    $this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d',$date);    }

然后在控制器的方法中写

// 使用latest变为倒序方法,比如我们规定了发表时间,所以可以使用where判断一下        // 但是样写法非常不明朗,太长,我们可以在模型里写一个函数叫做published()        // $sama = Samples::latest()->where('published_at','<=',Carbon::now())->get();
模型中写好函数.就可以这样使用了        $sama = Samples::latest()->published()->get();

模型类中函数写法

//函数的写法 scope+函数名  驼峰命名  [skoʊp]    //$query代表查询语句   public function scopePublished($query)   {   $query -> where('published_at','<=',Carbon::now());   }
关于强大的时间处理:Carbon,直接贴代码

public function show($id)    {        //但是如果传递的参数不存在的话,$list会返回null,建议在配置文件.env中的APP_DEBUG改为false,这样可以自定义404页面        //两种写法一种是if判断        $list = Samples::findOrFail($id);        //这里说一下Carbon有多强大        //dd($list->created_at);           // 输出: Carbon {#172 ▼           //        +"date": "2017-10-08 05:07:04.000000"           //        +"timezone_type": 3           //        +"timezone": "PRC"           //      }       // dd($list->created_at->year); //可以输出年份               //dd($list->created_at->diffForHumans()); //可以输出时间差:3 days ago"        //要输出中文格式,请在:在 app/Providers/AppServiceProvider.php 的 boot() 方法中直接加入 \Carbon\Carbon::setLocale('zh');        //如果想让published_at也可以作为carbon处理,则可以在模型类中添加成员属性 protected $dates = ['published_at'];即可        //dd($list->published_at);成功显示为carbon对象        //carbon文档:http://carbon.nesbot.com/docs/        // dd($list);        // return view('sites.smaple')->with('list',$list); 推荐写成下面这种写法        // if(is_null($list)){        //     abort(404);  这是一种写法,先判断一下数据是否为null,如果为null就抛出404页面        // }                但是我们的大laravel怎么会这么平凡,我们当然有神器OrFail加在find后面即可,        //                  如果没有数据则会返回No query results for model [App\Samples].        return view('sites.smaple',compact('list'));            }



阅读全文
0 0
原创粉丝点击