一、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