Laravel 基本操作
才开始接触laravel,慕课网轻松学会Laravel笔记。
Laravel中的路由和控制器
1. 路由
- 路由简介
- 用户的请求准发给相应的程序进行处理
- 建立url和程序之间的映射
- 请求类型get、post、put、patch、delete
- 基本路由
- 多请求路由
- 路由参数
- 路由别名
- 路由群组
- 路由输出视图
//get
Route::get('basic1',function () {
return 'hello';
});
Route::post('basic2',function (){
return 'world';
});
//多请求方式
Route::match(['get','post'],'multy1',function() {
return 'multy1';
});
//any
Route::any('multy2',function (){
return 'multy2';
});
//路由参数
Route::get('user/{id}',function($id){
return 'user-id-'.$id;
});
//可选参数
Route::get('user/{name?}',function($name = null){
return 'user-name-'.$name;
});
Route::get('user/{name?}',function($name = 'cate'){
return 'user-name-'.$name;
});
Route::get('user/{name?}',function($name = 'cate'){
return 'user-name-'.$name;
})->where('name','[A-Za-z]+');
Route::get('user/{id}/{name?}',function($id,$name = 'cate'){
return 'user-id-'. $id .'-name-'.$name;
})->where(['id'=>'[0-9]+','name'=>'[A-Za-z]+']);
//路由别名
Route::get('user/member-center',['as'=>'center',function(){
return 'member-center';
}]);
//http://test.com/user/member-center
Route::get('user/member-center',['as'=>'center',function(){
return route('center');
}]);
//路由群组
Route::group(['prefix'=>'member'],function (){
Route::get('user/member-center',['as'=>'center',function(){
return route('center');
}]);
Route::any('multy2',function (){
return 'multy2';
});
});
//http://test.com/multy2 multy2
//http://test.com/member/user/member-center http://test.com/member/user/member-center
//http://test.com/member/multy2 multy2
//路由中输出视图
Route::get('view',function (){
return view('welcome');
});
//http://test.com/view
2. 控制器
- 怎么新建一个控制器
- 控制器和路由怎样进行关联
- 关联控制器后,路由的特性怎么用
php artisan make:controller UserController
//会新建UserController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function info()
{
return 'user-info';
}
}
Route::get('user/info','UserController@info');
或者这样写
Route::get('user/info'['uses'=>'UserController@info'];
使用别名:
Route::get('user/info',[
'uses'=>'UserController@info',
'as'=> 'userinfo'
]);
public function info()
{
// return 'user-info';
return route('userinfo');
}
路由传递参数
路由
Route::get('member/{id}','MemberController@index')->where(['id'=>'[0-9]+']);
或者
Route::get('member/{id}','MemberController@index')->where('id','[0-9]+');
方法
public function index($id)
{
return 'member-index'.$id;
}
3. 视图
-
怎样新建视图
info.php
Infi.blade.php
http://test.com/member/12 //member-info php //控制器 return view('member-info'); //视图(member-info php) member-info.php
blade
return view('info'); //视图 info.blade.php
-
怎样输出视图
return view('info');
return view('member/info');
return view ('member/info',['name'=>'winne']);
在view下新建member目录
info.blade.php //resources/views/member/info.blade.php
变量
return view(
'member/info',
[
'name'=>'care',
'age' => 18
]
);
//view {{$name}}
4. 模型
怎么新建模型
怎么使用模型
return Member::getInfo();
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
public static function getInfo()
{
return 'hello';
}
}
5. 数据库操作之 -DB facade
Laravel中提供DB facade(原始查找)、查询构造器和Eloquent ORM三种操作数据库方式
- 新建数据表与连接数据库
create table if not exists `student`(
`id` int AUTO_INCREMENT primary key,
`name` varchar(255) not null default'' COMMENT '姓名',
`age` tinyint unsigned not null default 0 COMMENT '年龄',
`sex` tinyint unsigned not null default 0 COMMENT '性别',
`created_at` int not null default 0 COMMENT '新增时间',
`updated_at` int not null default 0 COMMENT '修改时间'
) engine=innodb default charset=utf8 auto_increment = 1 comment ='学生表';
- 使用DB facade实现CURD
public function test1()
{
// return 'test1';
//查询
// $student = DB::select('select * from student');
// var_dump($student);
//插入
// $bool = DB::insert('insert into student(name,age) values (?,?)',['care',18]);
// var_dump($bool);
//更新
// $num = DB::update('update student set age = ? where name = ?',[20,'care']);
// var_dump($num);
//查询
// $data = DB::select('select * from student');
// var_dump($data);
//删除
// $num = DB::delete('delete from student where id > ?',[1]);
// var_dump($num);
}
6. 数据库操作之 -查询构造器
1. 简介及新增数据
- 提供方便、流畅的接口,用来建立及执行数据库查询语法
- 使用PDO参数绑定,以保护应用程序免于SQL注入因此传入的参数不需额外转义特殊字符
- 基本可以满足所有的数据库操作,在所有支持的数据库系统上都可以执行
新增数据
//插入一条数据
$bool = DB::table('student')->insert(
['name'=>'care','age'=>18]
);
//返回插入数据的ID
$id = $bool = DB::table('student')->insertGetId(
['name'=>'care','age'=>18]
);
//插入多条数据
$bool = DB::table('student')->insert([
['name'=>'winne','age'=>18],
['name'=>'tony','age'=>19]
]);
2. 修改数据
- 更新为指定的内容
- 自增和自减
$num = DB::table('student')
->where('id',3)
->update(['age'=>1]);
var_dump($num);
//自增
$num = DB::table('student')->increment('age');
$num = DB::table('student')->increment('age',2);
//自减
$num = DB::table('student')->decrement('age');
$num = DB::table('student')->decrement('age',2);
//条件操作
$num = DB::table('student')->where('id',4)->decrement('age',2);
//自增、自减同时更新
$num = DB::table('student')->where('id',4)->decrement('age',2,['name'=>'imooc']);
3. 删除数据
$num = DB::table('student')->where('id',7)->delete();
$num = DB::table('student')->where('id','>=',5)->delete();
DB::table('student')->truncate();
4. 查询数据
- get();
- first();
- where();
- pluck();
- lists();
- select();
- chunk();
//第一条
$data = DB::table('student')->orderBy('id','desc')->first();
//按指定条件获取
$data = DB::table('student')->where('id','>',1)->get();
//多条件
$data = DB::table('student')->whereRaw('id > ? and age > ?',[1,3])->get();
//取字段
$data = DB::table('student')->pluck('name','id');
$data = DB::table('student')->pluck('name');
//取字段
$data = DB::table('student')->select('id','name','age')->get();
//分块
echo '<pre>';
DB::table('student')->orderBy('id')->chunk(2, function ($student) {
var_dump($student);
if(1){
return false;
}
});
5. 聚合函数
- max()
- min()
- sum()
- count()
- avg()
$num = DB::table('student')->sum('age');
$num = DB::table('student')->max('age');
$num = DB::table('student')->min('age');
$num = DB::table('student')->sum('age');
$num = DB::table('student')->avg('age');
7. 数据库操作之Eloquent ORM
- Eloquent ORM简介、模型的建立、查询数据
- 新增数据、自定义时间戳、批量赋值
- 修改数据
- 删除数据
1. Eloquent ORM简介、模型的建立、查询数据
模型的建立
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
protected $table = 'student';
protected $primaryKey = 'id';
}
Eloquent ORM中查询
- all()、find()、findOrFail()
- 查询构造器在ORM中的使用
$student = Student::all();
$student = Student::get();
$student = Student::find(1);
$student = Student::findOrFail(1);
$student = Student::sum('age');
$student = Student::max('age');
$student = Student::min('age');
$student = Student::avg('age');
$student = Student::sum('age');
$student = Student::where('id','>=',3)->orderBy('id','desc')->first();
2. 新增数据、自定义时间戳、批量赋值
//使用模型新增数据
$student = new Student();
$student->name ='pony';
$student->age = 45;
$bool = $student->save();
var_dump($bool);
$student = Student::find(8);
echo $student->created_at;
echo date('Y-m-d H:i:s',$student->cteated_at);
//使用模型的create方法新增
$student = Student::create(
['name'=>'san','age'=>18]
);
dd($student);
//firstOrCreate 查找不到就创建
$student = Student::firstOrCreate(
['name'=>'sans']
);
dd($student);
//firstOrNew 查找不到就返回,创建需save
$student = Student::firstOrNew(
['name'=>'sanss']
);
$bool = $student->save();
dd($bool);
模型中时间的处理、批量赋值的处理
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
protected $table = 'student';
protected $primaryKey = 'id';
//指定允许批量赋值的字段
protected $fillable = ['age','name'];
//指定不允许批量赋值的字段
protected $guarded = [];
public $timestamps = true;
public function getDateFormat()
{
return time();
}
protected function asDateTime($value) {
return $value;
}
}
3. ORM修改数据
- 通过模型更新
- 结合查询语句批量更新
//通过模型更新
$student = Student::find(8);
$student->name = 'two';
$bool = $student->save();
var_dump($bool);
//orm更新
$num = Student::where('id','>',9)->update(
['age'=>12]
);
var_dump($num);
需要关闭模型中时间转换 asDateTime
4. ORM删除数据
- 根据模型删除
- 根据主键值删除
- 根据指定条件删除
//根据模型删除
$student = Student::find(12);
$bool = $student->delete();
var_dump($bool);
//根据主键id删除
$num = Student::destroy(11);
$num = Student::destroy(9,10);
$num = Student::destroy([6,8]);
dd($num);
//根据指定条件删除
$num = Student::where('id','>=',3)->delete();
dd($num);
8. Blade模板使用
- Blade模板引擎简介及模板继承的使用
- 基础语法及include的使用
- 流程控制
- 模板中的URL
Blade模板引擎简介
Blade并不限制你在视图(view)中使用原生PHP代码
所有Blade视图页面都将被编译成原生PHP代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译。
模板继承
- section
- yield
- extands
- parent
@extends('layouts')
@section('header')
@parent
header
@stop
@section('sidebar')
sidebar
@stop
@section('content')
content
@stop
基础语法及include的使用
- 模板中输出变量
- 模板中调用PHP代码
- 原样输出
- 模板中的注释
- 引入子视图include的使用
@extends('layouts')
@section('header')
@parent
header
@stop
@section('sidebar')
sidebar
@stop
@section('content')
content
<!-- 1. 模板中输出变量-->
<p>{{$name}}</p>
<!-- 2. 模板中调用PHP代码-->
<p>{{time()}}</p>
<p>{{date('Y-m-d H:i:s',time())}}</p>
<p>{{in_array($name,$array) ? 'true' : 'false'}}</p>
<p>{{var_dump($array)}}</p>
<p>{{isset($name) ? $name :'default'}}</p>
<p>{{$name or 'default'}}</p>
<!-- 3. 原样输出-->
<p>@{{$name}}</p>
{{-- 4. 模板中的注释(浏览器看不到)--}}
{{-- 5. 引入子视图 include--}}
@include('student.common1',[
'message'=>'我是错误信息'
])
@stop
被引入 resources/views/student/common1.blade.php
<p>我是include{{$message}}</p>
模板中的流程控制
- if
- unless (if取反 )
- for
- foreach
- forelse
@extends('layouts')
@section('header')
@parent
header
@stop
@section('sidebar')
sidebar
@stop
@section('content')
content
<br>
@if($name == 'care')
I`m care
@elseif($name == 'imooc')
I`m imooc
@else
who am i?
@endif
<br>
@if(in_array($name,$array))
true
@else
false
@endif
<br>
@unless($name != 'care')
i`m care
@endunless()
<br>
{{--@for($i = 0 ;$i<10;$i++)--}}
{{--<p>{{$i}}</p>--}}
{{--@endfor--}}
<br>
@foreach($students as $student)
<p>{{$student->name}}</p>
@endforeach
<br>
@forelse($students as $student)
<p>{{$student->name}}</p>
@empty
<p>null</p>
@endforelse
@stop
模板中的URL
- url
- action()
- route
<a href="{{url('url')}}">url()</a>
<br>
<a href="{{action('StudentController@urlTest')}}">action()</a>
<br>
<a href="{{route('url')}}">route()</a>
public function urlTest()
{
return 'urlTest';
}
Route::get('url',['as'=>'url','uses'=>'StudentController@urlTest']);
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: