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也是有映射(输 ...
随机推荐
- CodeForces 723A The New Year: Meeting Friends (水题)
题意:给定 3 个数,求其中一个数到另外两个数之间的最短距离. 析:很明显选中间那个点了. 代码如下: #pragma comment(linker, "/STACK:1024000000, ...
- akka设计模式系列-akka在秒杀场景的应用
本博客讨论一下akka在秒杀场景下的应用,提出自己的见解,只做抛砖引玉,大神勿喷.秒杀活动涉及到前中后台各个阶段,为了说明问题,我们简化场景,只研究akka在后台如何处理秒杀业务. 秒杀活动 所谓的秒 ...
- 大数据技术之_25_手机APP信息统计系统项目_01_APP 数据生成模块 + 数据收集模块 + 数据处理模块框架搭建 + 业务需求处理 + 数据展示模块 +项目总结 + 问题总结
一 项目概述1.1 角色1.2 业务术语1.3 项目效果展示二 项目需求三 项目概要3.1 项目技术架构3.2 项目目录结构3.3 项目技术选型3.4 项目整体集群规划3.5 创建项目工程四 APP ...
- python列表和元组的常用操作
一.列表 需要安利一下:列表和字符串数是不一样的.进行操作时列表可以发生改变,而字符串不可以,所以直接在原来的对象上操作. 1.列表的增加 def append(self, p_object): # ...
- [USACO 2011 Dec Gold] Cow Calisthenics【二分】
Problem 1: Cow Calisthenics [Michael Cohen, 2010] Farmer John continues his never-ending quest to ke ...
- ACM数论-求组合数
我们利用这个公式求阶乘和逆元求阶: #include<cstdio> const int N = 200000 + 5; const int MOD = (int)1e9 + 7; int ...
- Linux环境下ZooKeeper集群环境搭建关键步骤
ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...
- 转-Mac下Apache Tomcat安装配置
ava Web如果稍微知道一点,一般对Tomcat都不会陌生,Apache是普通服务器,本身只支持html即普通网页,可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat ...
- [完美方案+无懈可击]ubuntu 14.04(LTS) + GTX 980Ti显卡配置
安装好系统之后出现的问题: 1 不能上网:后来通过删除链接新建一个以太网链接(自动DHCP)重启莫名其妙就好使了. 2 分辨率只有两个:1024x ? 和 800x600. 分辨率低到让人头痛.通过查 ...
- 阿里maven仓库地址
在国内访问Maven仓库,连接速度太慢.下面是将中央仓库替换成阿里云的中央仓库的方法. 第一种,统一修改仓库地址 可以直接修改Mavenconf文件夹中的setting.xml文件,或者在.m2文件夹 ...