laravel学习笔记二

原创 2015年11月17日 23:52:59

一、Eloquent

make:model name  会自动对应到model的tablename

php artisan tinker,进入一个php解释器交互界面。

$a= new App\AA;打开AA类。

$a->title="title";

$a->time=Carbon\Carbon::now();

$a->save();//写入数据库

$a->toArray();

$first=App\Articl::find(1);

$sencond=App\Article:where('columea','=','a')->get()->get();

$sencond=App\Article:where('columea','=','a')->get()->first();

$a=App\Article::create(['abc'=>'a','bca'='b']);//直接创建不用save,需要在article.php中添加$fillable=['abc','bca']就可以直接创建了。

$a->update(['abc'=>'b']);


二、建立一个blog全部过程

Route::get('/articles','ArticlesController@index');

Route::get('/articles/{id}','ArticlesController@show');//变量放在大括号中

php artisan make ::controller ArticlesController;

public function index()

{

$articles = Article::all();//要添加use App\Article,即可使用ArticleModel的方法

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

}

public function show($id)

{

$a = Article::find($id);

$a = Article::findOrFail($id);//如果找不到直接fail掉

//也可以这样实现

if(is_null($a))

abort('404');

return view('articles.show',compact('a'));//之后需要建立一个articles/show.blade.php文件

}

新建页面文件,articles/index.blade.php:

@extend('app')

@section('content')

<h1>Articles</h1>

<hr>

@foreach($articles as $article)

<h2><a href="/articles/{{$article->id}}">{{$article->title}}</h2>

<article>

<div class="body">

{{$article->content}}

</div>

</article>

@endeach

@stop

@content

三、Form

使用illuminate/html中的Form包

1.首先下载:composer require illuminate/html

2.配置:config----app.php

'providers' 这个数组中illuminate/html\HtmlServiceProvider::class

'aliases' 快捷方式:'form'=illuminate/html\FormFacade::class

3.POST路由

在routes.php中增加Route::post('/articles','ArticlesController@store');

4.view的php界面中 Form创建:

{{!!Form::open(['url'=>'articles'])!!}}

<div class="form-group">

{{!!Form::label('name')!!}}

{{!!Form::text('name',null,['class'=>'form-control','id'=>'id'])!!}}

</div>


<div class="form-group">

{{!!Form::label('name')!!}}

{{!!Form::textarea('name',null,['class'=>'form-control','id'=>'id'])!!}}

</div>


{{!!Form::submit('发表文章',['id'=>'idnumber'])!!}}

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


5.在controller的store方法中:

public function store(Request $request)

{

dd($request->all());

//dd($request->get('title'));

//接受post,存入数据库,重定向三步

$input=$request->all();

$input['published_at']=Carbon::now();

Article::create($input);

return redirect('/articles');

}

6.index方法修改

{

//$articles = Article:all();

$articles = Article::latest()->get();//按照新发表的顺序排序

}

四、queryScope和setAttribute用法

1.改变文章发布生效时间,在controller中:

public function store(Request $request)

{

dd($request->all());

//dd($request->get('title'));

//接受post,存入数据库,重定向三步

//

Article::create($request->all());

return redirect('/articles');

}

2.在view中添加:

<div class="form-group">

{{!!Form::label('published_at')!!}}

{{!!Form::input(''date','published_at',date('m-d-Y'),['class'=>'form-control','id'=>'id'])!!}}

</div>

3.在Article的Model文件中增加时分秒:

public function setPublishedAtAttribute($date)

{

$this->attributes['published_at']= Carbon::createFromFormat('Y-m-d',$date);

}

命名方式:setYOURNAMEAttribute,这样在数据存入数据库之前,会做一个相应的预处理。

4.将发布时间在未来的文章隐藏显示:

public function index()

{

$articles = Article::latest()->where('published_at','<',Carbon::now())->get();

或者:

$articles = Article::latest()->published()->get();//需要在Article类中增加一个scopePublished()方法

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

}

5.增加scopePublished()方法

public function scopePublished($query)

{

$query->where('published_at','<',Carbon::now());

}

6.Carbon的一些方法

$cb=$article->created_at默认的属性是作为Carbon对象存在的

$cb->year;

$cb->diffForHumans();//多少分钟之前,很强大

要将published_at作为Carbon对象使用,需要在Articles文件中为它设置属性:

protected $dates = ['published_at'];


五、表单验证

1.使用request方法:

make request命令

php artisan make:request CreatArticleRequest//在app\Requests下生成相应的文件

主要有两个函数:authorize(),rules()

public function rules()

{

return[

'title'=>'required | min:3 | max:5',

'content'=>'required',

'published_at'=>'required'

];

}

public function store(Requests\CreatArticleRequest$request)

{

Article::create($request->all());

return redirect('/articles');

}

这样验证不成功的话store方法是不会执行的。如果想要定位错误,需要继续修改

<div class="form-group">

{{!!Form::label('published_at')!!}}

{{!!Form::input(''date','published_at',date('m-d-Y'),['class'=>'form-control','id'=>'id'])!!}}

</div>

@if($error->any())

@foreach($errors->all() as $error)

<li class="list-group-item list-group-item-danger"> {{$error}}</li>

@endforeach

@endif


2.使用Request的validate()方法

public function store(Request $request)

{

$this->validate($request,['title'=>'required','content'=>'required']);

Article::create($request->all());

return redirect('/articles');

}


六、编辑 Form-Model-Binding

php artisan route:list//查看路由

Route::resource('articles','ArticlesController');//批量的生成路由

Route::get('/articles/{id}/edit','ArticlesController@edit');

Route::post('');


controller中的edit()方法:

public function edit($id)

{

$article= Article::findOrFail($id)

return view('articles.edit',compact($article));

}

新建view文件:

@section('content')

{!! Form::model($article,['method'=>'PATCH']  !!}// Form-Model-Binding,这样将Article的属性绑定到FORM内容中

//与创建页面时相同

@stop


更新controller@update()

public function update(Request $request, $id)

{

$article= Article::findOrFail($id);

$article->update(request->all());

return view('/articlest');

}


增加表单验证同上。

@include(errors/list)  //默认resources\views文件夹下,便于维护


七、用户注册和登陆

laravel5.1中去除了Authetication模块,需要自己实现

1.首先在Routes.php 增加GET和POST两个login,GET和POST两个register,一个GET的logout。

2.在Controller中查看Auth相关方法

3.实现views的auth.register, auth.login等界面

4.获取登陆的用户信息:1.Controller中Auth::user()2.视图文件 {{Auth::User()->name}};


八、Eloquent Relationship

一对一,一对多,多对多。

这里要建立文章和用户的对应关系。

1.修改database\migrations的migrations文件中的up方法,增加一些数据库表属性。

$table->integer('user_id')->unsigned();

$table->foreign('user_id')->references('id')->on('user');//创建外键,限制为仅仅是user中的id

2. php artisan migrate:refresh //会将之前的数据抹掉

所以需要新建一个: php artisan make:migration add_user_id_column_to_articles --table=articles





Laravel 5 学习笔记

  • 2017年03月19日 10:28
  • 26.09MB
  • 下载

laravel5学习笔记(二)

这两天被composer弄得抓狂~,又因为不熟悉win7下的命令,弄得异常纠结~好了,切入正题。。。 当初图省事,所以下载的laravel一键安装包,后来发现不行,还是得下载composer。因为采用...

(二) Laravel学习笔记之执行流程//待完善V1.0

1、Composer自动加载第三方类库 /public/index.php:/* |---------------------------------------------------------...
  • lx1036
  • lx1036
  • 2015年10月20日 15:30
  • 861

Laravel 学习笔记——路由(路由与控制器)

Laravel 学习笔记——路由(路由与控制器)  1      分享 ⋅ chongyi ⋅ 于 1年前 ⋅ 最后回复由 88635 于 1个月前 ⋅ 15752 阅读 原文地址: ...

Laravel学习笔记(四)---操作数据库--原生SQL语句

Laravel支持多种数据库,包括MySQL、Postgres、SQLite和SQL Server,在Laravel中连接数据库和查询数据库都非常简单,我们可以使用多种方式与数据库进行交互,包括 原...
  • tiansan
  • tiansan
  • 2017年04月01日 09:04
  • 4087

Laravel 学习笔记 —— 神奇的服务容器

原文地址: http://www.insp.top/learn-laravel-container ,转载务必保留来源,谢谢了! 容器,字面上理解就是装东西的东西。常见的变量、对象属性等...

Laravel学习笔记(六)---操作数据库--Eloquent ORM(对象关系映射)

Eloquent ORM(对象关系映射) ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的...
  • tiansan
  • tiansan
  • 2017年04月01日 11:28
  • 2673

(转载)Laravel学习笔记(一)安装配置开发环境

原文地址:http://www.cnblogs.com/huangbx/p/Laravel_1.html 摘要 Laravel的目标是给开发者创造一个愉快的开发过程,并且不...

7. Laravel5学习笔记:如何定义自己的视图组件

视图组件视图组件就是在视图被渲染前,会调用的闭包或类方法。如果你想在每次渲染某些视图时绑定数据,视图组件可以把这样的程序逻辑组织在同一个地方。对上面的话,理解如下: 这个php代码运行的时间是在渲染视...
  • hel12he
  • hel12he
  • 2015年07月02日 17:59
  • 2292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:laravel学习笔记二
举报原因:
原因补充:

(最多只允许输入30个字)