laravel学习笔记1--基础
一、安装
1、安装
composer create-project laravel/laravel=v5.5.28 laravel
2、测试
配置nginx根目录为laravel/public,并且美化路由:
root /var/www/laravel/public;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}

http://localhost/index.php,出现如下页面证明安装laravel成功:

二、路由Route:
1、get案例:
Route::get('basic1', function() {
return 'hello basic1';
});
2、post案例:
Route::post('basic2', function() {
return 'hello basic2';
});
备注:如果出现如下页面

原因:因为post方法需要进行csrf验证,这里用postman测试,可以将该url设置为不用csrf验证,处理如下:

然后再次访问,即可:

3、多请求路由:
Route::match(['get', 'post'], 'multy1', function() {
return 'hello multy1';
});
Route::any('multy2', function() {
return 'hello multy2';
});
4、路由参数:
1)传递参数:
Route::get('user/{id}', function($id) {
return 'hello user' . $id;
});

2)设置参数可选:
Route::get('user/{id?}', function($id = ) {
return 'hello user' . $id;
});
3)参数验证:
Route::get('user/{id?}', function($id = ) {
return 'hello user' . $id;
})->where('id', '[0-9]+');
这时,如果请求参数不符合条件,则会报错:

多参数验证写法:
Route::get('user/{id?}/{name?}', function($id = , $name = 'lily') {
return 'hello user id:' . $id . ', name:' . $name;
})->where(['id' => '[0-9]+', 'name' => '[a-zA-Z]+']);
5、路由别名:
Route::get('user/center', ['as' => 'center', function(){
return route('center');
}]);

6、路由群组:
Route::group(['prefix' => 'member'], function() {
Route::get('user/center', ['as' => 'center', function(){
return route('center');
}]);
Route::any('multy2', function() {
return 'hello multy2';
});
});

7、路由中输出视图:

三、控制器
1、创建控制器:

<?php
namespace App\Http\Controllers; class MemberController extends Controller
{
public function info()
{
return 'member-info';
}
}
2、路由访问控制器下的方法:
1)
Route::get('member/info', 'MemberController@info');
2)
Route::get('member/info', ['uses' => 'MemberController@info']);
四、视图:
1、创建及传参

<?php
namespace App\Http\Controllers; class MemberController extends Controller
{
public function info()
{
return view('member/info', [
'name' => 'lisi',
'age' =>
]);
}
}
五、模型:
1、创建模型:

<?php
namespace App; use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
public static function getMember()
{
return 'member name is sean';
}
}
六、数据库操作:
1、数据库准备:
CREATE database laravel;
use laravel;
CREATE TABLE IF NOT EXISTS student( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR() NOT NULL DEFAULT '' COMMENT '姓名', `age` TINYINT UNSIGNED NOT NULL DEFAULT , `sex` TINYINT UNSIGNED NOT NULL DEFAULT , `created_at` INT NOT NULL DEFAULT , `updated_at` INT NOT NULL DEFAULT ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT= COMMENT='学生表';
2、laravel配置数据库:

3、使用facade实现CURD
1)查询:
$students = DB::select('select * from student where id > ?',
[1]);


2)新增:
$bool = DB::insert('insert into student(name, age) values (?, ?)',
['tom', ]);
3)修改:
$num = DB::update('update student set age = ? where name = ?',
[, 'tom']);
4)删除:
$num = DB::delete('delete from student where id = ?',
[]);
4、查询构造器实现CURD:
1)新增:
$bool = DB::table('student')->insert([
'name' => 'zhangsan',
'age' =>
]);
2)新增并且返回自增id:
$id = DB::table('student')->insertGetId([
'name' => 'lisi',
'age' =>
]);
3)插入多条数据:
$bool = DB::table('student')->insert([
['name' => 'test1','age' => ],
['name' => 'test2','age' => ],
]);
4)更新数据:
$num = DB::table('student')
->where('id', )
->update(['age' => ]);
5)自增,默认为自增1:
$num = DB::table('student')
->where('id', )
->increment('age', );
6)自减,默认为自减1:
$num = DB::table('student')
->where('id', )
->decrement('age', );
7)自增同时更改其他字段:
$num = DB::table('student')
->where('id', )
->increment('age', , ['name' => 'haha']);
8)删除:
$num = DB::table('student')
->where('id', '>=', )
->delete();
9)清空数据表:
DB::table('student')
->truncate();
10)查询
10.1获取所有数据:get
$students = DB::table('student')->get();
10.2获取一条数据:first
$student = DB::table('student')->orderBy('id', 'desc')->first();
10.3多个查询条件查询语句:whereRaw
$students = DB::table('student')
->whereRaw('id >= ? and age > ?', [, ])
->get();
10.4返回指定单个字段:pluck
$students = DB::table('student')
->pluck('name');
10.5查询指定的字段:select
$students = DB::table('student')
->select('name', 'age')
->get();
10.6分批查询,适用于表数据很多的时候使用:chunk
DB::table('student')
->orderBy('id', 'desc')
->chunk(, function($students) {
var_dump($students);
});
11)聚合函数
11.1计数:count
$nums = DB::table('student')->count();
11.2查询最大值、最小值:max、min
$age = DB::table('student')->max('age');
$age = DB::table('student')->min('age');
11.3平均数:avg
$age = DB::table('student')->avg('age');
11.4求和:sum
$age = DB::table('student')->sum('age');
4、Eloquent ORM模型的建立及查询数据
1)建立模型
<?php
namespace App; use Illuminate\Database\Eloquent\Model; /**
*
*/
class Student extends Model
{
// 指定表名
protected $table = 'student';
// 指定主键
protected $primaryKey = 'id'; // 自动维护时间戳
public $timestamps = true; // 时间戳格式
protected function getDateFormat()
{
return time();
}
}
2、查询
1)查询所有记录:all
$students = Student::all();

2)根据主键查询一条数据:find
$students = Student::find();
3)根据主键查询一条数据,查询不到抛出异常:findOrFail
$students = Student::findOrFail();
4)可用查询构造器的方法,如下所示,其他方法类似:
Student::orderBy('id', 'desc')
->chunk(, function($students){
var_dump($students);
});
3、新增数据:
1)新增
$student = new Student();
$student->name = 'jose';
$student->age = ;
$bool = $student->save();
2)新增的数据更新时间戳和添加时间戳取出时是自动被格式化了的时间:
$student = Student::find();
echo $student->updated_at;


如果不想模型自动格式化时间,需要在模型里添加asDateTime方法:
// 取消自动格式化时间
protected function asDateTime($val)
{
return $val;
}

3)create新增数据:
$student = Student::create(
['name' => 'xiaoen', 'age' => ]
);
前提条件是模型需要设置允许批量赋值的字段或不允许批量赋值的字段
// 指定允许批量赋值的字段
protected $fillable = ['name', 'age']; // 指定不允许批量赋值的字段
protected $guarded = [];

4)查找数据,如果查找不到则新增数据:firstOrCreate
$student = Student::firstOrCreate(
['name' => 'xiaoen1', 'age' => ]
);
5)查找数据,如果没有数据则创建数据对象,需要保存到数据库时再调用save方法:firstOrNew
$student = Student::firstOrNew(
['name' => 'xiaoen2', 'age' => ]
);
$bool = $student->save();
4、更新数据
1)通过模型更新数据:
$student = Student::find();
$student->name = 'tiantian';
$bool = $student->save();
确保asDateTime方法为屏蔽状态,不然上述更新会报错:

2)批量更新:update
$num = Student::where('id', '>', )
->update(['age' => ]);
5、删除
1)通过模型删除:delete
$student = Student::find();
$bool = $student->delete();
2)通过主键删错:destroy
如下为删错id为7和8的记录:
$num = Student::destroy(7, 8);
3)删除指定数据:使用where
$num = Student::where('id', '>', )->delete();
七、Blade模板
1、模板继承:@section、@yield、@extends
公共模板:common.layouts.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>laravel - @yield('title')</title>
<style type="text/css">
.header {
width: 1000px;
height: 150px;
margin: 0 auto;
background: #f5f5f5;
border: 1px solid #ddd;
}
.main {
width: 1000px;
height: 300px;
margin: 0 auto;
margin-top: 15px;
clear: both;
}
.main .sidebar {
float: left;
width: 20%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.main .content {
float: right;
width: 75%;
height: inherit;
background: #f5f5f5;
border: 1px solid #ddd;
}
.footer {
width: 1000px;
height: 150px;
margin: 0 auto;
margin-top: 15px;
background: #f5f5f5;
border: 1px solid #ddd;
}
</style>
</head>
<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>
</html>
继承模板:info.blade.php
@extends('common.layouts')
@section('header')
header
@stop
@section('sidebar')
@parent
sidebar
@stop
@section('content')
content
@stop
对应目录:



效果显示:

2、模板中变量的输出
1)方法中传变量

2)模板中调用变量:

显示效果图:

3、模板中引入子视图:@include
@include('student.child', ['content' => '我是子视图内容'])

子视图代码:

显示效果图:

4、模板中的流程控制:
1)@if、@elseif、@else、@endif
<!-- 1、if -->
@if ($name == 'sean')
I am sean
@elseif ($name == 'lily')
I am lily
@else
Who am I?
@endif
备注,if条件中也是可以使用php函数
@if (in_array($name, $arr))
true
@else
false
@endif
2)@unless:相当于@if的取反
@unless ($name != 'sean')
I am sean
@endunless
3)@for
@for ($i = 0; $i <; $i++)
{{$i}}
@endfor
4)@foreach
@foreach ($students as $student)
{{$student->name}}
@endforeach
5)@forelse、@empy:@forelse遍历的对象中没有数据时输出@empty中的内容
@forelse ($students as $student)
{{$student->name}}
@empty
null
@endforelse
5、模板中的url
1)准备要跳转的url
Route::get('user/center', ['as' => 'center', 'uses' => 'StudentController@testUrl']);
2)模板中使用不同的方法来跳转:url()、action()、route();一般使用rout()方法根据别名跳转
<a href="{{url('user/center')}}">url()方法</a>
<a href="{{action('StudentController@testUrl')}}">action()方法</a>
<a href="{{route('center')}}">route()方法</a>
laravel学习笔记1--基础的更多相关文章
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...
- Laravel学习笔记(三)--在CentOS上配置Laravel
在Laravel框架上开发了几天,不得不说,确实比较优雅,处理问题逻辑比较清楚. 今天打算在CentOS 7上配置一个Laravel,之前都是在本机上开发,打算实际配置一下. 1)系统 ...
- Django学习笔记(基础篇)
Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html
- Laravel学习笔记之Session源码解析(上)
说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- MAVEN学习笔记之基础(1)
MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...
- mybatis学习笔记之基础复习(3)
mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...
随机推荐
- mac上 mysql 突然无法启动的问题
创建: 2018/02/12 更新: 2018/02/12 补充如何不用sudo 更新: 2018/02/24 补充解决方案1,纠正不用sudo的方案.纠正一些错别字 更新: 2018/08/20 补 ...
- 洛谷 P3358 最长k可重区间集问题 【最大费用最大流】
同 poj 3680 https:www.cnblogs.com/lokiii/p/8413139.html #include<iostream> #include<cstdio&g ...
- 洛谷P3295 [SCOI2016]萌萌哒(倍增+并查集)
传送门 思路太妙了啊…… 容易才怪想到暴力,把区间内的每一个数字用并查集维护相等,然后设最后总共有$k$个并查集,那么答案就是$9*10^{k-1}$(因为第一位不能为0) 考虑倍增.我们设$f[i] ...
- JAVA中抽象类不可以实例化,却可以创建数组
这是我定义的一个抽象类: 如果你试图创建一个对象,当然是不行的,抽象类不能用new运算符创建对象. 这是错误提示,还记得instantiate这个单词吗?在我的这篇随笔第二篇(那些JAVA程序BUG中 ...
- LoadRunner_11破解教程完整版
2017.12.17更正 qtm的LR11,如果是win10版本的电脑而且ie浏览器是11以上的请到loadrunner官网下载社区免费版,支持google,firefox,edge,ie11四大浏览 ...
- 贪心+stack Codeforces Beta Round #5 C. Longest Regular Bracket Sequence
题目传送门 /* 题意:求最长括号匹配的长度和它的个数 贪心+stack:用栈存放最近的左括号的位置,若是有右括号匹配,则记录它们的长度,更新最大值,可以在O (n)解决 详细解释:http://bl ...
- NSSet转成NSArray 以及NSSortDescriptor的使用
//如果想排序以后再取,可以这样:NSSet *users = [groupUser users]; //如果是存的字典,则key后面写的是想按照哪个关键字进行排序 NSSortDescriptor ...
- RMAN-06564错误的原因及解决办法
今日在进行数据库恢复时,遭遇RMAN-06564错误,如下: RMAN> restore spfile from autobackup; Starting restore at 01-NOV-1 ...
- Ubuntu卸载软件包
sudo apt-get autoremove --purge mysql-server-5.0 ,purge连同配置文件一起删除,autoremove自动卸载依赖包sudo apt-get remo ...
- [转]Azure 表存储和 Windows Azure SQL Database - 比较与对照
本文转自:https://msdn.microsoft.com/library/azure/jj553018 更新时间: 2014年10月 作者:Valery Mizonov 和 Seth Manhe ...