前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel基础

Laravel基础

作者头像
唐成勇
发布2019-05-26 10:54:22
7.7K0
发布2019-05-26 10:54:22
举报
文章被收录于专栏:唐成勇唐成勇

一、Laravel核心目录文件介绍

  • app:程序的核心代码和业务逻辑代码,其中的Http目录是我们业务逻辑的存放点
  • bootstrap:包含框架启动的和自动加载文件
  • config:包含所有程序中的配置文件,比如:cache.php(缓存)database.php(数据库)、queue.php(队列)等
  • database:包括数据库填充和迁移文件
  • public:程序入口和静态文件,比如之后的CSS 、JS、IMG
  • resources:包含视图和原始系统文件
  • storage:包含编译后的文件
  • tests:单元测试目录,存放测试代码

二、路由、控制器

2.1 路由详解

  • 场景:将用户的请求转发给相应的程序进行处理;
  • 作用:建立URL和程序(处理函数)之间的映射;
  • 类型:get,post,put,pathc,delete

Tips: 业务逻辑不应该写在路由当中,路由只是接收参数后转发给控制器(Controller)进行处理

2.1.1 get请求路由

代码语言:javascript
复制
Route::get('basic1',function(){
    return 'Hello World';
})

2.1.2 post请求路由

代码语言:javascript
复制
Route::post('basic2',function(){
    return 'basic2';
})

2.1.3 多请求路由

2.1.3.1 [类型], 路由名
代码语言:javascript
复制
Route::match(['get','post'],'multy1',function(){
    return 'multy1';
})
2.1.3.2 任意类型

Route::any('multy2',function(){

代码语言:javascript
复制
return 'multy2';

})

2.1.4 路由参数

代码语言:javascript
复制
Route::get('user/{id}',function($id){
    return 'USER-'.$id;
});

name赋默认值kitty,是name变为可选项(加?)

代码语言:javascript
复制
Route::get('user/{name?}',function($name = 'kitty'){
    return 'USERNAME-'.$name;
});

将参数使用正则表达式来限制

代码语言:javascript
复制
Route::get('user/{name?}',function($name = 'kitty'){
    return 'USERNAME-'.$name;
})->where('name',[A-Za-z]+);    //name可由多个字母组成

Route::get('user/{id}/{name?}',function($name = 'kitty'){
    return 'USER-Id:'. $id . '  name:'.$name;
})->where['id'=>[0-9]+,'name'=>[A-Za-z]+]

2.1.5 路由别名

代码语言:javascript
复制
Route::get('user/member-center',['as' => 'center',function(){
    return 'member-center';
}]);
clipboard.png
clipboard.png

2.1.6 路由群组,prefix路由前缀

代码语言:javascript
复制
Route::group(['prefix' => 'member'],function(){
    Route::get('user/member-center',['as' => 'center',function(){
        return 'member-center';
    }]);
    Route::any('multy2',function(){
        return 'multy2';
    });
});

2.1.7 路由视图

代码语言:javascript
复制
Route::get('view',function(){
    return view('welcome');//调用/laravel/resources/views/welcome.blade.php文件
});

2.2 路由和控制器绑定

  1. Route::请求方式('请求url',控制器名称@控制器下的方法)
  2. Route::请求方式('请求url',['uses'=>控制器名称@控制器下的方法])
  3. Route::请求方式('请求url',['uses'=>控制器名称@控制器下的方法,'as'=>'别名'])
  4. Route::请求方式('/demo/{id}',[‘uses’=>控制器名称@控制器下的方法])

2.3 视图 - 使用模板

直接在控制器里面调用view然后return返回即可

代码语言:javascript
复制
return view(路径/模板, [待传入的变量array格式]);

例: return view('member/info', ['id'=>$id]);

三、数据库操作

3.1 DB facade(原始查找)

DB facade实现CURD(原生SQL语句操作数据库 )

3.1.1 插入数据 (返回bool 插入是否成功)

代码语言:javascript
复制
$result = DB::insert('insert into student(name,age) values(?,?)', 
['abcd',23]);

3.1.2 查询数据 (返回array 所有查询结果)

代码语言:javascript
复制
$result = DB::select('select * from student where id < ?', [
    1002
]);

3.1.3 修改数据 (返回int 受影响行数)

代码语言:javascript
复制
$result = DB::update('update student set age = ? where name = ?', [
    21, 'EnzoLiu'
]);

3.1.4 删除数据 (返回int 受影响行数)

代码语言:javascript
复制
$result = DB::delete('delete from student where name = ?', ['abcd']);

laraevl内置函数dd,可人性化的打印数组:dd($result);

3.2 数据库操作 - 查询构造器

3.2.1 查询构造器简介

  1. Laravel 查询构造器(query Builder)提供方便,流畅的接口,用来建立及执行数据库查找语法
  2. 使用PDO参数绑定,以保护应用程序免于SQL注入,因此传入的参数不需额外转义特殊字符
  3. 基本可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行

3.2.2 查询构造器CURD

3.2.2.1 查询构造器 - 新增

1、新增一条数据(返回bool类型 新增结果)

代码语言:javascript
复制
$result = DB::table('student')->insert([
    'name' => 'Toky',
    'age' => 19
]);

2、新增一条数据(返回int类型 新增后的主键ID)

代码语言:javascript
复制
$result = DB::table('student')->insertGetId([
    'name' => '亲爱的路人',
     'age' => 19
]);

3、增加多条数据(注: 只能使用insert 返回新增结果)

代码语言:javascript
复制
$result = DB::table('student')->insert(
    [
        ['name' => 'name1', 'age' => 31],
        ['name' => 'name2', 'age' => 32]
    ]
);
3.2.2.2 查询构造器 - 更新
代码语言:javascript
复制
//返回影响的行数
DB::table('as_admin')->where('id', 12)->update(['age' => 18]); 
代码语言:javascript
复制
//字段自增3写,默认为1法 返回影响的行数
DB::table('as_admin')->where('id', 12)->increment('age', 3); 
代码语言:javascript
复制
//字段自减3写,默认为1法 返回影响的行数
DB::table('as_admin')->where('id', 12)->decrement('age', 3); 
代码语言:javascript
复制
//自增或自减的同时更新name字段
DB::table('as_admin')->where('id', 12)->decrement('age', 3, ['name' => '张佳']);
3.2.2.3 查询构造器 - 删除数据

关键词:

代码语言:javascript
复制
delete 删除数据
truncate 清空表,并将ID自增重置为0

示例代码:

代码语言:javascript
复制
delete
DB::table("表名")->where('条件')->delete();

truncate
DB::table("表名")->truncate();
3.2.2.4 查询构造器 - 查询数据

get - 查询多条数据结果

代码语言:javascript
复制
DB::table("表名")->get();
DB::table("表名")->where(条件)->get();

pluck - 查询指定字段数据

代码语言:javascript
复制
DB::table("表名")->pluck("字段名");
DB::table("表名")->where(条件)->pluck("字段名");

lists - 和 pluck 效果相同

代码语言:javascript
复制
DB::table("表名")->lists("字段名");
DB::table("表名")->lists("字段名1","字段名2");

select - 指定要查询的字段

代码语言:javascript
复制
DB::table("表名")->select("id","name")->get();

结果分块:如果你需要操作数千条数据库记录,可以考虑使用 chunk 方法。这个方法每次只取出一小块结果传递给 闭包 处理。例如,一次处理整个 users 表中的 100 个记录:

代码语言:javascript
复制
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
    foreach ($users as $user) {
        //
    }
});

你可以从 闭包 中返回 false 来阻止进一步的分块的处理:

代码语言:javascript
复制
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
    // Process the records...

    return false;
});
3.2.2.5 聚合函数
代码语言:javascript
复制
DB::table('as_admin')->select('id','name','age')->count(); //返回记录数
DB::table('as_admin')->select('id','name','age')->max('age'); //最大值,min同理
DB::table('as_admin')->select('id','name','age')->avg('age'); //返回平均值
DB::table('as_admin')->select('id','name','age')->sum('sum'); //返回指定字段数据      

3.3 Eloquent ORM

clipboard.png
clipboard.png

创建Model类型,方法里面声明两个受保护属性:$table(表名)和$primaryKey(主键)

代码语言:javascript
复制
<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class Student extends Model{
        protected $table = 'student';
        protected $primaryKey = 'id';
    }

3.1 Eloquent ORM查询

all: 通过orm获取所有数据

代码语言:javascript
复制
$result = Student::all();

find: 通过主键返回指定的数据

代码语言:javascript
复制
$result = Student::find(1001);

findOrFail: 通过主键返回指定的数据 未查找到到则抛出异常

代码语言:javascript
复制
$result = Student::findOrFail(1001);

获取符合条件的数据

代码语言:javascript
复制
$student = Student::where('age', '<', 20)->get();

分段式(分页)获取数据递交给闭包函数循环处理

代码语言:javascript
复制
Student::chunk(2, function($student) {
     var_dump($student);
});

查询构造器之聚合函数

代码语言:javascript
复制
$result = Student::count();

3.2 Eloquent ORM 增加数据、自定义时间戳及批量赋值

clipboard.png
clipboard.png

建立model类 (app\Student.php)

代码语言:javascript
复制
protected $table = 表名;
protected $promaryKey = 主键名;
public $timestamps = false;  //是否开启时间戳自动调节
//使用时间戳存入数据库
protected function getDateFormat() { return time(); } 
//将数据库里的时间戳取出时不被转换为日期
protected function asDatetime($val) { return $val; }  
protected $fillable = ['name', 'age']; //允许批量赋值的字段 白名单设置
protected $guarded = ['aa', 'bb'];  //不允许批量赋值的字段 黑名单设置

$fillabel 是为了防止注入攻击,比如有的用户可能在表单中注入了一些别的信息更改数据库中的其他内容,因此我们要定义哪些数据是能被修改的,这里就是’$fillabel’包含的内容才能够被修改.而$hidden包含的内容则是指存储时这些信息会被加密存储,这样即使数据库泄露出去,信息也不会那么容易直接被读取。

3.2.1 通过模型新增数据(涉及到自定义时间戳)

代码语言:javascript
复制
$student = new Student();
$student -> name = 'stu1';
$student -> age = 20;
$student -> save();

3.2.2 使用模型的create方法新增数据(涉及到批量赋值)

代码语言:javascript
复制
$student = new Student();
$result = $student -> create([
    'name' => 'create',
    'age' => 30
]);

//firstOrCreate 查找数据并返回,如果不存在则插入该条数据并返回
$result = Student::firstOrCreate([
'name' => 'aj',
'age' => 32
]);

//firstOrNew 查找数据并返回,如果不存在则返回该类的对象,调用save才得以保存
$result = Student::firstOrNew(['name' => 'make']);
$result = $result->save();
dd($result);

3.3 Eloquent ORM 修改数据

通过模型更新数据 (最后返回bool类型,单条数据是否修改成功)

代码语言:javascript
复制
$student = Student::find(1051);
$student->name = 'aj2';
$result = $student->save();

结合查询语句批量更新 (返回int类型 受影响行数)

代码语言:javascript
复制
$result = Student::where('id', '>', 1050)
    ->update([
        'name'=>'adj',
        'age'=>32
    ]);

3.4 Eloquent ORM 删除数据

  1. 使用模型删除数据
  2. 通过主键值删除数据
  3. 根据指定条件删除数据 //1. $student = Student::find(1001); $student ->delete(); //2. Student::destroy(1001); Student::destroy(1001,1002); Student::destroy([1001,1002]); //3. Student::where('id', '>', 1004)->delete();

四、Blade模板引擎

4.1 Blade模板继承

代码语言:javascript
复制
<body>
    <div class="header">
        @section('header')
        头部
        @show
    </div>

    <div class="main">
        <div class="sidebar">
            @section('sidebar')
            侧边栏
            @show
        </div>

        <div class="content">
            @yield('content','主要内容区域');
        </div>
    </div>

    <div class="footer">
        @section('footer')
         底部
        @show
    </div>
</body>

section是用来定义一个视图片段的 yield 是用来展示某个指定的section里所表达的内容 可以将其假设为一个占位符用子模版去实现它 区别:

  • yield是不可扩展的(因为他只声明定义了一个视图片段没有任何内容)
  • section既定义了视图片段,也可以有内容,还可以被子模版扩展

view中,模板继承: 用@extends('模板名') 模板重写:

@section('重写部分的名字') 重写的内容 @stop

@yield的模板重写也是一样的用法。

4.2 基础语法与include的使用

  1. 模板中输出php变量 {{ $name }}
  2. 模板中执行php代码 {{ date('Y-m-D H:i:s', time()) }}
  3. 模板中强制输出 @{{ $name }} 字符串 @{{ $name }}
  4. 模板注释格,不会在查看源代码中显示,和html注释的区别 {{-- 模板注释 --}}
  5. 子视图引用 include @include('common1', ['message'=>'hello world'])

4.3 流程控制

模板中的流程控制 @if @unless @for $foreach $forelse

4.3.1 if

代码语言:javascript
复制
@if($name == 'EnzoLiu')
    i'm EnzoLiu
@elseif($name == 'jeck')
    i'm jeck
@else
    who am i?
@endif

4.3.2 unless(与if反向)

代码语言:javascript
复制
@unless($name != 'EnzoLiu')
    我是EnzoLiu
@else
    我不是EnzoLiu
@endunless 

4.3.3 for

代码语言:javascript
复制
@for($i=0; $i<10; $i++)
    {{ $i }}
@endfor 

4.3.4 foreach 数组/对象遍历

代码语言:javascript
复制
@foreach($res as $key => $value)
    {{ $key }}<br>{{ $value }}
@endforeach

4.3.5 forelse 循环(特殊)

释: $res如果有值则运行 $obj->name 代码块, 如果为空则显示 null

代码语言:javascript
复制
@forelse($res as $obj)
    {{ $obj->name }}<br>
@empty
    null
@endforelse 

4.4 模板中URL

1、 url()通过路由的名称生成url

代码语言:javascript
复制
<a href="{{ url('url') }}">url()</a>

2、 action()通过制定控制器及方法名生成url

代码语言:javascript
复制
<a href="{{ action('StudentController@urlTest') }}">action()</a>

3、 route()通过路由的别名生成url

代码语言:javascript
复制
<a href="{{ route('url') }}">route()</a>

参考视频教程:轻松学会Laravel-基础篇

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Laravel核心目录文件介绍
  • 二、路由、控制器
    • 2.1 路由详解
      • 2.1.1 get请求路由
      • 2.1.2 post请求路由
      • 2.1.3 多请求路由
      • 2.1.4 路由参数
      • 2.1.5 路由别名
      • 2.1.6 路由群组,prefix路由前缀
      • 2.1.7 路由视图
    • 2.2 路由和控制器绑定
      • 2.3 视图 - 使用模板
      • 三、数据库操作
        • 3.1 DB facade(原始查找)
          • 3.1.1 插入数据 (返回bool 插入是否成功)
          • 3.1.2 查询数据 (返回array 所有查询结果)
          • 3.1.3 修改数据 (返回int 受影响行数)
          • 3.1.4 删除数据 (返回int 受影响行数)
        • 3.2 数据库操作 - 查询构造器
          • 3.2.1 查询构造器简介
          • 3.2.2 查询构造器CURD
        • 3.3 Eloquent ORM
          • 3.1 Eloquent ORM查询
            • 3.2 Eloquent ORM 增加数据、自定义时间戳及批量赋值
              • 3.2.1 通过模型新增数据(涉及到自定义时间戳)
              • 3.2.2 使用模型的create方法新增数据(涉及到批量赋值)
            • 3.3 Eloquent ORM 修改数据
              • 3.4 Eloquent ORM 删除数据
              • 四、Blade模板引擎
                • 4.1 Blade模板继承
                  • 4.2 基础语法与include的使用
                    • 4.3 流程控制
                      • 4.3.1 if
                      • 4.3.2 unless(与if反向)
                      • 4.3.3 for
                      • 4.3.4 foreach 数组/对象遍历
                      • 4.3.5 forelse 循环(特殊)
                    • 4.4 模板中URL
                    相关产品与服务
                    数据库
                    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档