Laravel基础
一、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请求路由
Route::get('basic1',function(){
return 'Hello World';
})
2.1.2 post请求路由
Route::post('basic2',function(){
return 'basic2';
})
2.1.3 多请求路由
2.1.3.1 [类型], 路由名
Route::match(['get','post'],'multy1',function(){
return 'multy1';
})
2.1.3.2 任意类型
Route::any('multy2',function(){
return 'multy2';
})
2.1.4 路由参数
Route::get('user/{id}',function($id){
return 'USER-'.$id;
});
将name
赋默认值kitty
,是name
变为可选项(加?
)
Route::get('user/{name?}',function($name = 'kitty'){
return 'USERNAME-'.$name;
});
将参数使用正则表达式来限制
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 路由别名
Route::get('user/member-center',['as' => 'center',function(){
return 'member-center';
}]);
2.1.6 路由群组,prefix
路由前缀
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 路由视图
Route::get('view',function(){
return view('welcome');//调用/laravel/resources/views/welcome.blade.php文件
});
2.2 路由和控制器绑定
- Route::请求方式('请求url',控制器名称
@
控制器下的方法) - Route::请求方式('请求url',['uses'=>控制器名称
@
控制器下的方法]) - Route::请求方式('请求url',['uses'=>控制器名称
@
控制器下的方法,'as'=>'别名']) - Route::请求方式('/demo/{id}',[‘uses’=>控制器名称
@
控制器下的方法])
2.3 视图 - 使用模板
直接在控制器里面调用view
然后return
返回即可
return view(路径/模板, [待传入的变量array格式]);
例: return view('member/info', ['id'=>$id]);
三、数据库操作
3.1 DB facade(原始查找)
DB facade
实现CURD
(原生SQL
语句操作数据库 )
3.1.1 插入数据 (返回bool 插入是否成功)
$result = DB::insert('insert into student(name,age) values(?,?)',
['abcd',23]);
3.1.2 查询数据 (返回array 所有查询结果)
$result = DB::select('select * from student where id < ?', [
1002
]);
3.1.3 修改数据 (返回int 受影响行数)
$result = DB::update('update student set age = ? where name = ?', [
21, 'EnzoLiu'
]);
3.1.4 删除数据 (返回int 受影响行数)
$result = DB::delete('delete from student where name = ?', ['abcd']);
laraevl
内置函数dd
,可人性化的打印数组:dd($result);
3.2 数据库操作 - 查询构造器
3.2.1 查询构造器简介
- Laravel 查询构造器(query Builder)提供方便,流畅的接口,用来建立及执行数据库查找语法
- 使用PDO参数绑定,以保护应用程序免于
SQL
注入,因此传入的参数不需额外转义特殊字符 - 基本可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行
3.2.2 查询构造器CURD
3.2.2.1 查询构造器 - 新增
1、新增一条数据(返回bool类型 新增结果)
$result = DB::table('student')->insert([
'name' => 'Toky',
'age' => 19
]);
2、新增一条数据(返回int类型 新增后的主键ID)
$result = DB::table('student')->insertGetId([
'name' => '亲爱的路人',
'age' => 19
]);
3、增加多条数据(注: 只能使用insert 返回新增结果)
$result = DB::table('student')->insert(
[
['name' => 'name1', 'age' => 31],
['name' => 'name2', 'age' => 32]
]
);
3.2.2.2 查询构造器 - 更新
//返回影响的行数
DB::table('as_admin')->where('id', 12)->update(['age' => 18]);
//字段自增3写,默认为1法 返回影响的行数
DB::table('as_admin')->where('id', 12)->increment('age', 3);
//字段自减3写,默认为1法 返回影响的行数
DB::table('as_admin')->where('id', 12)->decrement('age', 3);
//自增或自减的同时更新name字段
DB::table('as_admin')->where('id', 12)->decrement('age', 3, ['name' => '张佳']);
3.2.2.3 查询构造器 - 删除数据
关键词:
delete 删除数据
truncate 清空表,并将ID自增重置为0
示例代码:
delete
DB::table("表名")->where('条件')->delete();
truncate
DB::table("表名")->truncate();
3.2.2.4 查询构造器 - 查询数据
get - 查询多条数据结果
DB::table("表名")->get();
DB::table("表名")->where(条件)->get();
pluck - 查询指定字段数据
DB::table("表名")->pluck("字段名");
DB::table("表名")->where(条件)->pluck("字段名");
lists - 和 pluck 效果相同
DB::table("表名")->lists("字段名");
DB::table("表名")->lists("字段名1","字段名2");
select - 指定要查询的字段
DB::table("表名")->select("id","name")->get();
结果分块:如果你需要操作数千条数据库记录,可以考虑使用 chunk
方法。这个方法每次只取出一小块结果传递给 闭包 处理。例如,一次处理整个 users
表中的 100
个记录:
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
foreach ($users as $user) {
//
}
});
你可以从 闭包 中返回 false
来阻止进一步的分块的处理:
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
// Process the records...
return false;
});
3.2.2.5 聚合函数
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
创建Model
类型,方法里面声明两个受保护属性:$table
(表名)和$primaryKey
(主键)
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
protected $table = 'student';
protected $primaryKey = 'id';
}
3.1 Eloquent ORM查询
all: 通过orm
获取所有数据
$result = Student::all();
find: 通过主键返回指定的数据
$result = Student::find(1001);
findOrFail: 通过主键返回指定的数据 未查找到到则抛出异常
$result = Student::findOrFail(1001);
获取符合条件的数据
$student = Student::where('age', '<', 20)->get();
分段式(分页)获取数据递交给闭包函数循环处理
Student::chunk(2, function($student) {
var_dump($student);
});
查询构造器之聚合函数
$result = Student::count();
3.2 Eloquent ORM 增加数据、自定义时间戳及批量赋值
建立model
类 (app\Student.php
)
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 通过模型新增数据(涉及到自定义时间戳)
$student = new Student();
$student -> name = 'stu1';
$student -> age = 20;
$student -> save();
3.2.2 使用模型的create方法新增数据(涉及到批量赋值)
$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
类型,单条数据是否修改成功)
$student = Student::find(1051);
$student->name = 'aj2';
$result = $student->save();
结合查询语句批量更新 (返回int
类型 受影响行数)
$result = Student::where('id', '>', 1050)
->update([
'name'=>'adj',
'age'=>32
]);
3.4 Eloquent ORM 删除数据
- 使用模型删除数据
- 通过主键值删除数据
根据指定条件删除数据
//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模板继承
<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的使用
- 模板中输出
php
变量
{{ $name }} - 模板中执行
php
代码
{{ date('Y-m-D H:i:s', time()) }} - 模板中强制输出 @{{ $name }} 字符串
@{{ $name }} - 模板注释格,不会在查看源代码中显示,和html注释的区别
{{-- 模板注释 --}} - 子视图引用 include
@include('common1', ['message'=>'hello world'])
4.3 流程控制
模板中的流程控制 @if @unless @for $foreach $forelse
4.3.1 if
@if($name == 'EnzoLiu')
i'm EnzoLiu
@elseif($name == 'jeck')
i'm jeck
@else
who am i?
@endif
4.3.2 unless(与if反向)
@unless($name != 'EnzoLiu')
我是EnzoLiu
@else
我不是EnzoLiu
@endunless
4.3.3 for
@for($i=0; $i<10; $i++)
{{ $i }}
@endfor
4.3.4 foreach 数组/对象遍历
@foreach($res as $key => $value)
{{ $key }}<br>{{ $value }}
@endforeach
4.3.5 forelse 循环(特殊)
释: $res如果有值则运行 $obj->name 代码块, 如果为空则显示 null
@forelse($res as $obj)
{{ $obj->name }}<br>
@empty
null
@endforelse
4.4 模板中URL
1、 url()通过路由的名称生成url
<a href="{{ url('url') }}">url()</a>
2、 action()通过制定控制器及方法名生成url
<a href="{{ action('StudentController@urlTest') }}">action()</a>
3、 route()通过路由的别名生成url
<a href="{{ route('url') }}">route()</a>
Laravel基础的更多相关文章
- laravel基础课程---16、数据迁移(数据库迁移是什么)
laravel基础课程---16.数据迁移(数据库迁移是什么) 一.总结 一句话总结: 是什么:数据库迁移就像是[数据库的版本控制],可以让你的团队轻松修改并共享应用程序的数据库结构. 使用场景:解决 ...
- laravel基础课程---15、分页及验证码(lavarel分页效果如何实现)
laravel基础课程---15.分页及验证码(lavarel分页效果如何实现) 一.总结 一句话总结: 数据库的paginate方法:$data=\DB::table("user" ...
- laravel基础课程---14、表单验证(lavarel如何进行表单验证)
laravel基础课程---14.表单验证(lavarel如何进行表单验证) 一.总结 一句话总结: lavarel的验证的功能比tp要[简单]且[强大]很多 直接控制器中:添加[规则数组]和[修改提 ...
- laravel基础课程---13、数据库基本操作2(lavarel数据库操作和tp对比)
laravel基础课程---13.数据库基本操作2(lavarel数据库操作和tp对比) 一.总结 一句话总结: 非常非常接近:也是分为两大类,原生SQL 和 数据库链式操作 学习方法:使用时 多看手 ...
- laravel基础课程---12、lavarel的ajax操作2(lavarel的ajax使用总结)
laravel基础课程---12.lavarel的ajax操作2(lavarel的ajax使用总结) 一.总结 一句话总结: 比较简单:就是js请求ajax,然后控制器获取请求参数,返回数据即可 1. ...
- laravel基础课程---11、lavarel的ajax操作(ajax优劣势是什么)
laravel基础课程---11.lavarel的ajax操作(ajax优劣势是什么) 一.总结 一句话总结: 优势:用户友好度:异步通信,不会频繁刷新页面,用户友好度比较高 优势:减轻数据库压力 缺 ...
- laravel基础课程---10、数据库基本操作(如何使用数据库)
laravel基础课程---10.数据库基本操作(如何使用数据库) 一.总结 一句话总结: 1.链接数据库:.env环境配置里面 2.执行数据库操作:DB::table('users')->up ...
- laravel基础课程---9、视图(lavarel的模板语法和tp相比怎样)
laravel基础课程---9.视图(lavarel的模板语法和tp相比怎样) 一.总结 一句话总结: lavarel的模板语法比thinkphp好用很多:和html代码配合的更好 lavarel比t ...
- laravel基础课程---8、laravel响应和视图(响应是什么)
laravel基础课程---8.laravel响应和视图(响应是什么) 一.总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返回某个类 ...
- laravel基础课程---7、文件处理、闪存、cookie(cookie原理和使用场景)
laravel基础课程---7.文件处理.闪存.cookie(cookie原理和使用场景) 一.总结 一句话总结: 页面请求服务器的时候是把这个页面中所有的cookie都带上了的,cookie里面也存 ...
随机推荐
- Assert随笔
☆ Assert.notNull(haha, "未找到需要导入的计划1");//haha必须不能为null,if为null则抛出message的异常: Assert.hasText ...
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
本篇是在上一篇的基础上添加日志功能,并记录NLog在Asp.Net Core里的使用方法. 第一部分:默认Logger支持 一.project.json添加日志包引用,并在cmd窗口使用 dotnet ...
- && 和 || 运算
a() && b() :如果执行a()后返回true,则执行b()并返回b的值:如果执行a()后返回false,则整个表达式返回a()的值,b()不执行: a() || b() :如果 ...
- java 多线程知识点
线程状态图 说明: 线程共包括以下5种状态. 新建状态(New) : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread(). 就绪状态(Runnable) ...
- 使用scrapy框架爬取自己的博文(2)
之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- - 显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u76 ...
- Exchange 2003服务器中如何在公司资料夹中设置共享行事历
Exchange 2003服务器中如何在公司资料夹中设置共享行事历 编写人:左丘文 2018-2-23 春节假期归来,开工第一天,感觉还没有从假期中恢复及调整过来.突然想到了我已经荒废了近一年的园子, ...
- 【Hibernate学习笔记-6.1】无连接表的N-1关联(单向)
作者:ssslinppp 1. 摘要 主要讲解N-1关系表的设计,N:从表,1:主表: 从表(N)中使用外键关联到主表(1),单向的: 场景: 许多人(N)可以住在同一个地方(1),知道人 ...
- ASP.NET Web Pages:WebGrid 帮助器
ylbtech-.Net-ASP.NET Web Pages:WebGrid 帮助器 1.返回顶部 1. ASP.NET Web Pages - WebGrid 帮助器 WebGrid - 众多有用的 ...
- [转]批处理遍历文件夹生成 html 文件
[转自] http://www.360doc.com/content/15/0205/20/21861372_446525665.shtml :: 自动将指定文件夹中的图片写入到 html 文件中 @ ...
- cmd命令总结
1.进入d盘 2.命令运行D:\mongodb\bin中的mongod.exe 显示安装成功!(命令行下运行 MongoDB 服务器)