Laravel学习笔记
路由:
单一路由请求
Route::get('路由名称',function (){ //单一路由请求
return 'hello,World';
});
多请求路由
Route::match(['get','post'], '路由名称',function(){ //多请求路由,可接受get和post两个请求
return 'hello,world';
});
Route::any('路由名称',function(){ //可以相应任何请求
renturn 'xxx'
});
路由参数
Route::get('test/{id}',function($id){ //在浏览器中输入 test/2 浏览器会显示 test-2
return 'test-'.$id;
});
Route::get('test/{name?}',function($name = 'tao'){ //当在浏览器输入 test/时,浏览器显示默认值 test-name-tao
return 'test-name-'.$name; //当输入 test/tao1 则会显示 test-name-tao1
});
Route::get('test/{name?}',function ($name = 'tao'){
//如果输入 test/1 会报错,因为不符合输入规范 应该输入A-Z和a-z的
return 'test-name-'.$name;
})->where('name','[A-Za-z]+');
Route::get('test/{id?}/{name}',function (id,name){
//只有输入 test/1/tao 会成功,满足正则表达式的定义
return 'test-id-'.$id.'-name-'.$name;
})->where(['id'=>'[0-9]+','name'=>'[A-Za-z]+']);
Route::get('test/member-center',['as'=>'center',function(){
//路由别名 可以通过route(‘别名’)来返回当前URL的地址,比如此函数返回http://localhost/laravel/public/test/member-center
return route('center');
}]);
路由群组
Route::group(['prefix'=>'member'],function (){
//prefix=前缀 在路由群组中的路由,如果访问 test1 是无法访问的 如果为member/test1即可访问
Route::get('test1',function (){
return 'hello ,test1';
});
Route::get('test2',function (){
return 'hello test2';
});
});
在模板中输出视图
Route::get('view', function () {
// 创建路由后 直接 return view('文件名(XX.blade.php)');
return view('welcome');
});
创建控制器
1.控制器的创建需要在Http下面的Controller里创建
2.命名规则需要驼峰命名法
3.需要填写命名空间一般为namespace App\Http\Controllers;
4.最简单控制器代码
class MemberController extends Controller{
public function info(){
return 'member-info';
}
在路由中输入
Route::get('test','MemberController@info')
//即可在浏览器中输入 test访问, MemberController为控制器的名称,info为方法,中间由@连接;
//另一种表示方式
Route::get('test',['uses' => 'MemberController@info']);
//any ,post 等等都可用
//uses是固定的不可修改
给关联控制器的路由起别名
Route::get('test',[
'uses' =>'MemberController@info',
'as' => 'member' //别名为member 可用route输出地址
]);
传入值,而且验证值 只需要在方法info中加入 id即可info( id)
Route::get('test/{id}',[
'uses'=>'MemberController@info',
'as' => 'member'
])->where(['id'=>'[0-9]+']);
View的输出
一般的我们把一个控制器的视图都放在一个文件夹里
比如饮用member下的info.blade.php视图,则应该在控制器里return view(‘member/info’);
我们也可以在视图里输出变量,只需要在控制器中定义变量即可在控制器中
return view('member/info',[
'name'=>'tao',
'age'=>18
]);
//在模板中{{$name}}{{age}}即可输出变量
模型的建造
模型之家在app下创建 ,namespace App;
内容大致与控制器相同
但是在使用模型时要在控制器中
例:Member模型的getMember方法
只需要在控制器中 Member::getMember();即可
连接数据库
laravel已经帮我们封装过数据库了
只需要在env中修改即可
使用数据库的功能可使用DB模型
DB::select(‘select * from xxx’); //查询 返回数组
insert
DB::insert('insert into student(name,age) values(?,?)',['tao','18']);
//向数据库添加数据,不过这这种更安全 //如果成功返回BOOL值
update
$num = Db::update('update student set age = ? where name = ?',[20,'tao']);
//向数据库中更新数据,返回结果为影响的行数
select
DB::select('select * from xxx');
$arr = DB::select('select * from student where age > ?', [19]);
// 查询where 年龄大于19 返回结果为数组
delete
$num = DB::delete('delete from student where id = ?', [2001]);
//删除数据库中数据,返回结果为删除的行数
查询构造器
$bool = DB::table('student')->insert( //查询构造器和上述方法一样
['name' => 'tao2','age' => '15']
);
使用查询构造器获得自增id
$num = DB::table('student')->insertgetid( //既返回id 返回的为id值
['name' => 'tao3','age' => '15']
);
使用查询构造器 一次插入多条数组
$bool = DB::table('student')->insert([ //既使用二维数组,返回值为Bool
['name' => 'name1','age' => 18],
['name' => 'name2','age' => 20]
]);
使用查询构造器更新数据
$num = DB::table('student')
->where('id',2003) //返回值为更新的行数
->update(
['name'=>'tao9']
);
使用查询构造器自增自减
$num = DB::table('student')->increment('age');
// 默认全部数据自增年龄字段加1 返回为影响的行数
$num = DB::table('student')->increment('age',3);
//默认全部数据自增年龄字段加3 返回为影响的行数
$num = DB::table('student')->decrement('age');
// 默认全部数据自减年龄字段加1 返回为影响的行数
$num = DB::table('student')->increment('age',3);
//默认全部数据自减年龄字段3 返回为影响的行数
$num = DB::table('student') //增加id为2003的数据年龄加100,返回影响的行数
->where('id',2003)
->increment('age',100);
$num = DB::table('student') //在自增年龄的同时,更改那么字段,返回仍为影响的行
->where('id',2003)
->increment('age',100,['name'=>'imooc']);
使用查询构造器删除数据
$num = DB::table('student') //删除id为2003的,如果不带where条件全表删除 返回为受影响行数
->where('id',2003)
->delete();
$num = DB::table('student')
->where('id','<=',2003) //增加删除条件,删除<=2003的 返回影响的行数
->delete();
DB::table('student')->truncate(); //全表删除,不返回任何数据 很危险不建议使用
使用查询构造器查询数据
students = DB::table('student')->get();
//获取数据表中全部数据,返回全部数组,建议用dd()方法打印数组
$students = DB::table('student')->first();
//获取表中第一条数据,返回第一条数据的数组
$students = DB::table('student')
->orderBy('id','desc')
->first();
//获取第一条数据,数据以倒叙排列,既获取最新数据 返回第一条数据数组
$students = DB::table('student')
->where('id','>=',6)
->get();
//使用where条件 查询所有id>6的数组
$students = DB::table('student')
->whereRaw('id >= ? and age > ?',[5,10])
->get();
//添加多个条件 把where改为 whereRaw
$name = DB::table('student')->pluck('name');
//返回指定字段,返回数据库中全部的name字段
$name = DB::table('student')->lists('name');
//效果和pluck一样
$name = DB::table('student')->lists('name','id');
//此处可返回表
原来数据情况:
array:9 [▼
0 => "tao1"
1 => "tao2"
2 => "tao3"
3 => "tao4"
4 => "tao5"
5 => "tao6"
6 => "tao7"
7 => "tao8"
8 => "tao9"
]
返回下表后,构成关联数组,带上了id
array:9 [▼
1 => "tao1"
2 => "tao2"
3 => "tao3"
4 => "tao4"
5 => "tao5"
6 => "tao6"
7 => "tao7"
8 => "tao8"
9 => "tao9"
]
查询指定字段
$student = DB::table('student')
//查询数据库中指定字段 id,name,age的值,用get()返回全部数据
->select('id','name','age')
->get();
每次查询2条数据
DB::table('student')->chunk(2,function ($student){ //每次查询2条数据
var_dump($student);
});
DB::table('student')->chunk(2,function ($student){ //查询两条后自动退出
var_dump($student);
return false;
});
聚合函数
$num = Db::table('student')->count(); //统计有多少条数据 返回的值是数据的条数
$max = Db::table('student')->max('age');//年龄的最大值 ,ave()求平均,min()求最小
ORM
在app下面创建模型
namespace App;
use Illuminate\Database\Eloquent\Model; //一般直接表的名称是模型的复数
class Student extends Model{
protected $table = 'student'; //指定表名
protected $primaryKey = 'id'; //指定主键
}
ORM查询
$students = Student::all(); //返回全部的数据
$student = Student::find(5); //根据主键查找 查找主键为5的数据,返回的是一条数据
$student = Student::findOrfail(55); //根据主键查找,如果所查数据不存在即会报错
$student = Student::where('age','>','5')->first(); //加条件的查找
查询构造器的函数这都能用
Student::count(); // 以下同理,上面提到的函数都能用
使用模型增加数据,在控制器中
$student = new Student();
$student->name = 'tao11'; //使用save方法时,会新增时间,如果不想可以在模型中输入 public $timestamps = false;
$student->age = 19;
$bool = $student->save();
在模型中添加
protected function getDateFormat(){ //时间会自动变成时间戳
return time();
}
想输出时间直接
$time = Student::find(12); //即可输出时间
echo $time->created_at;
在使用create方法前要先在模型中加入允许批量赋值的语句
protected $fillable = ['name','age']; 后面为允许批量赋值的字段
$student = Student::create(
['name' => 'tao15','age'=>'18'] //使用create方法赋值
);
指定不能批量赋值的字段
protected $guarded = [] //即可指定不能在create赋值
firstOrCreate
$student = Student::firstOrCreate(
['name' => 'tao16','age'=>'18'] //查找数据,如果查不到就新增一条
firstOrNew
$student = Student::firstOrNew(
['name' => 'tao17','age'=>'18']
//查找数据,如果找不到就新增一个实例,如果需要保存自行调用save函数
);
);
ORM更新数据
$student = Student::find(5);
$student->name = 'tao55';
$student->save();
$num = Student::where('id','>',13)->update( //使用查询构造器批量更新 返回的是更新的行数
['age'=>41]
);
使用orm删除数据
$student = Student::find(2);
$student->delete(); //返回值为bool值
$num = Student::destroy(3,4); //返回为删除的行数
$num = Student::where('id','>',13)->delete(); //删除指定条件的数据
模板继承
larevel 中的模板继承可见 laravel基础篇的7-1
在模板中输出php
现在控制器中定义一个变量
$name = tao;
只需在 return view('模板名称', //即可
[ 'name'=>$name])
在模板中<p>{{$name}}</p>
模板中的原样输出只需要<p>{{@$name}}</p>
模板中的注释{{-- --}}
include引入子视图
@include('路径')
URL
模板中的URL
url() url('路由名称‘)
action(’控制器和方法名')
route('别名')