laravel

来源:互联网 发布:看板设计软件 编辑:程序博客网 时间:2024/05/16 06:05

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中加入idinfo(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"]返回下表后,构成关联数组,带上了idarray: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(34);      //返回为删除的行数$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('别名')