Laravel学习过程之基础知识学习和使用(二)

这个系列的第一节节写的是laravel在windows环境下的安装与配置,后面又写了laravel在linux(centos7.2)环境下的安装与配置,终于这个系列再次更新啦。


二、学习和使用laravel

(一)、Laravel中的路由和MVC

1. 路由

l  路由简介

概念:简单地说就是讲用户的请求转发给相应的程序进行处理。

作用:建立URL与程序之间的映射。

请求类型:get、post、put、patch、delete。


l  基本路由

在APACHE服务器上的访问方式上去除index.php;

get路由实例:

Route::get('basic1', function(){
return"Hello World!";
});
post路由实例:
Route::post('basic2', function(){
return"Hello World!!!";
});

l  多请求路由

多请求路由实例:

Route::match(['get', 'post'], 'multy1', function(){
return"multy1";
});
Route::any('multy2', function(){
return"multy2";
});

l  路由参数

路由参数实例:

Route::get('user/{id}', function($id){
return"User-id-".$id;
});
Route::get('user/{name?}', function(){
return"User-name-".$name;
});
Route::get('user/{name?}', function($name ='sean'){
return"User-name-".$name;
});
Route::get('user/{name?}', function($name ='sean'){
return"User-name-".$name;
})->where('name', '[a-zA-Z]+');
Route::get('user/{id}/{name?}',function($id, $name){
return"User-id-".$id."-name-".$name;
})->where(['id'=>'[0-9]+','name'=>'[a-zA-Z]+']);

l  路由别名

路由别名实例:

Route::get('user/member-center',['as'=>'center', function(){
returnroute('center');
}]);

l  路由群组

路由群组实例:

Route::group(['prefix'=>'member'],function(){
Route::get('multy2',function(){
return "member-multy2";
});
Route::get('center',['as'=>'center-alis', function(){
return route('center-alis');
}]);
});

l  路由中输出视图

路由中输出视图实例:

Route::get('view', function(){
return view('welcome');
});

解释:当返回内容是字符串时,相当于正常的路由输出字符串;当返回内容是view函数时,去resources/views中寻找view函数里面字符串对应的文件名文件,并显示其视图内容。

2. 控制器

l  怎么新建一个控制器

在app/Http/Controllers新建一个文件MemberController.php

并在文件中写命名空间和类及方法,实例如下:

<?php
namespace App\Http\Controllers;

class MemberController extends Controller {
publicfunction info(){
return"member-info";
}
}

Laravel学习过程之基础知识学习和使用(二)_Laravel框架

l  路由和控制器怎么关联

在app/Http/routes.php文件中添加一行代码,即是访问MemberController控制器的info方法,如下:

routes.php:

第一种方式:

Route::get('member/info','MemberController@info');

第二种方式:

Route::get('member/info', ['uses'=>'MemberController@info']);

MemberController.php:

<?php
namespace App\Http\Controllers;

class MemberController extends Controller {
publicfunction info(){
return"member-info";
}
}

l  关联控制器后,路由的特性怎么用


路由别名:

routes.php:

Route::get('member/info', [
'uses'=>'MemberController@info',
'as'=>'memberinfo'
]);

MemberController.php:

<?php
namespace App\Http\Controllers;

class MemberController extends Controller {
publicfunction info(){
//return "member-info";
returnroute('memberinfo');
}
}

路由参数:

routes.php:

第一种方式:

Route::get('member/{id}','MemberController@info')->where('id', '[0-9]+');

第二种方式:

Route::get('member/{id}',['uses'=>'MemberController@info'])->where('id', '[0-9]+');

MemberController.php:

<?php
namespace App\Http\Controllers;

class MemberController extends Controller {
publicfunction info($id){
//return "member-info";
//return route('memberinfo');
return"member-info-id-".$id;
}
}

注意:5.2以上的laravel版本已经不支持Route::controller方式绑定控制器的方式!

Laravel学习过程之基础知识学习和使用(二)_数据库操作_02


3. 视图

l  怎样新建视图

在resources/views目录里可以新建视图;

新建member-info.php模板(视图)文件,并写内容,如下;

member-info php



Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_03

MemberController.php控制器文件内容:

<?php
namespace App\Http\Controllers;

class MemberController extends Controller {
publicfunction info($id){
//return "member-info";
//return route('memberinfo');
//return "member-info-id-".$id;
returnview('member-info');
}
}

routes.php路由文件内容:

// Route::get('member/{id}','MemberController@info')->where('id', '[0-9]+');
Route::get('member/{id}',['uses'=>'MemberController@info'])->where('id', '[0-9]+');

建立默认模板:

同样是在resources/views目录里可以新建视图(模板);

建立文件info.blade.php,并写入内容,如下:



Laravel学习过程之基础知识学习和使用(二)_基础知识_04

路由内容同上;

控制器内容如下:

<?php
namespace App\Http\Controllers;

class MemberController extends Controller {
publicfunction info($id){
//return "member-info";
//return route('memberinfo');
//return "member-info-id-".$id;
//return view('member-info');
returnview('info');
}
}

注意:默认模板(视图)文件名公共后缀为*.blade.php。

一般情况下,根据共同交叉内容会创建一个目录,目录里面放模板,一个模板对应一个控制器。

l  怎样输出视图

实例如下:

模板目录及内容(加参数输出)

member/info blade php

{{$name}}

{{$age}}



Laravel学习过程之基础知识学习和使用(二)_基础知识_05

路由同上;

MemberController.php控制器文件内容:

<?php
namespace App\Http\Controllers;

class MemberController extends Controller {
publicfunction info($id){
//return "member-info";
//return route('memberinfo');
//return "member-info-id-".$id;
//return view('member-info');
//return view('info');
return view('member/info',[
'name' => '丁梦涛',
'age' => 18
]);
}
}

模板视图显示结果:



Laravel学习过程之基础知识学习和使用(二)_案例解析_06

4. 模型

l  怎样新建模型

模型所在目录文件是:app,如User.php就是默认模型

在app目录下新建Member.php模型,内容如下:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
publicstatic function getMember(){
return "Member name is 丁梦涛。"
}
}

l  怎样输出模型

路由同上;

在控制器中调用模型:

在MemberController.php控制器文件中使用模型类名::模型方法,如Member::getMember(),实例如下:

<?php
namespace App\Http\Controllers;
use App\Member;

class MemberController extends Controller {
publicfunction info($id){
//return "member-info";
//return route('memberinfo');
//return "member-info-id-".$id;
//return view('member-info');
//return view('info');
//return view('member/info',[
// 'name' => '丁梦涛',
// 'age' => 18
//]);
return Member::getMember();
}
}

结果显示如下图:



Laravel学习过程之基础知识学习和使用(二)_数据库操作_07

Laravel中提供了DB façade(原始查找)、查询构造器、Eloquent ORM三种操作数据库的方式。

(二)、数据库操作之-DB facade

1. 新建数据表与连接数据库

l  新建数据库

可以使用phpmyadmin,也可以使用cmd控制台,连接数据库成功后,创建数据库laravel:

create database laravel charset=utf8;

选择要操作的数据库:

use lavarel;

l  新建数据表

CREATETABLE IF NOT EXISTS student(
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255) NOT NULL DEFAULT ''COMMENT '姓名',
`age` TINYINT UNSIGNED NOT NULL DEFAULT 0COMMENT '年龄',
`sex` TINYINT UNSIGNED NOT NULL DEFAULT 10 COMMENT '性别',
`created_at`INT NOT NULL DEFAULT 0 COMMENT '新增时间',
`updated_at`INT NOT NULL DEFAULT 0 COMMENT '修改时间'
)ENGINE=INNODB DEFAULT CHARSET = UTF8 AUTO_INCREMENT=1001 COMMENT='学生表';

注意:数据库配置在config/database.php文件和.env文件中。

修改.env文件中对应database.php的mysql数据库配置,如主机地址、端口号、数据库名、用户名、密码,具体根据自己的配置进修改。



Laravel学习过程之基础知识学习和使用(二)_Laravel框架_08

Laravel学习过程之基础知识学习和使用(二)_基础知识_09

2. 使用DB façade实现CURD

实例操作:

l  建立student控制器StudentController.php

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class StudentController extends Controller
{
public function test1(){
// return "test1";
$student_row = DB::select('select * from student');
if ($student_row){
echo "查询到结果.";
}else{
echo "查询结果为空!";
}
echo "<pre>";
var_dump($student_row);
}
}

l  路由文件routes.php写访问StudentController控制器文件的路由

Route::any('test1', ['uses' =>'StudentController@test1']);

l  访问结果



Laravel学习过程之基础知识学习和使用(二)_基础知识_10

l  插入(新增)数据

在StudentController控制器的test1方法中写如下内容:

$bool = DB::insert('insert into (name, age)VALUES (?,?)', ['丁梦涛',18]);
var_dump($bool);

访问结果:



Laravel学习过程之基础知识学习和使用(二)_案例解析_11

Laravel学习过程之基础知识学习和使用(二)_Laravel框架_12

说明插入数据成功。

l  修改数据

在StudentController控制器的test1方法中写如下内容:

$num = DB::update('update student set age=?where name=?',[20,'丁梦涛']);
var_dump($num);

访问结果:



Laravel学习过程之基础知识学习和使用(二)_数据库操作_13

Laravel学习过程之基础知识学习和使用(二)_数据库操作_14

说明修改成功。

l  查询数据

在StudentController控制器的test1方法中写如下内容:

$students_row = select('select * fromstudent');
echo “<pre>”;
var_dump($students_row);

访问结果:



Laravel学习过程之基础知识学习和使用(二)_数据库操作_15

说明查询成功。

l  删除数据

在StudentController控制器的test1方法中写如下内容:

$num = DB::delete('delete from studentwhere name=?',['丁梦涛']);
echo "<pre>";
var_dump($num);

访问结果显示:



Laravel学习过程之基础知识学习和使用(二)_基础知识_16

Laravel学习过程之基础知识学习和使用(二)_案例解析_17

说明删除一个,成功。

注意:删除的时候务必带上条件,否则可能造成数据丢失。

(三)、数据库操作之-查询构造器.

1. 查询构造器简介

l  Lavarel查询构造器提供方便、流畅的接口,用来建立及执行数据库查找语法;

l  使用PDO参数绑定,以保护应用程序免于SQL注入,因此传入的参数不需要额外转义特殊字符;

l  基本可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行。

2. 使用查询构造器新增数据

Student的StudentController.php文件建立query1方法:

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;

class StudentController extends Controller
{
// 查询构造器
public function query1(){
// 新增数据
$bool = DB::table('student')->insert(['name'=>'dingding','age'=>18]);
var_dump($bool);
}
}

路由routes.php:

//student查询构造器路由

Route::any('query1', ['uses' =>'StudentController@query1']);

l  仅插入数据:

在StudentController控制器的控制器的query1方法中写如下内容:

//新增数据

$bool =DB::table('student')->insert(['name'=>'dingding', 'age'=>18]);
var_dump($bool);

结果:



Laravel学习过程之基础知识学习和使用(二)_基础知识_18

Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_19

l  插入数据时获取自增的id:

在StudentController控制器的query1方法中写如下内容:

$id =DB::table('student')->insertGetid(['name'=>'mente', 'age'=>19,'sex'=>1]);
var_dump($id);

结果:



Laravel学习过程之基础知识学习和使用(二)_Laravel框架_20

Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_21

l  插入多条数据:

在StudentController控制器的query1方法中写如下内容:

$bool = DB::table('student')->insert([
['name'=>'ding', 'age'=>21, 'sex'=>0],
['name'=>'meng', 'age'=>22, 'sex'=>1],
['name'=>'tao', 'age'=>23, 'sex'=>0]
]);
var_dump($bool);

结果:



Laravel学习过程之基础知识学习和使用(二)_基础知识_22

Laravel学习过程之基础知识学习和使用(二)_案例解析_23

3. 使用查询构造器修改数据

l  更新为指定的内容

在StudentController控制器的query1方法中写如下内容:

$num = DB::table('student')->where('id',5)->update(['name'=>'sun']);
var_dump($num);

结果:



Laravel学习过程之基础知识学习和使用(二)_Laravel框架_24

Laravel学习过程之基础知识学习和使用(二)_数据库操作_25

l  自增和自减

不带条件切默认自增(自减)时增减单位是1,且更新全部记录;

在StudentController控制器的query1方法中写如下内容:

$num =DB::table('student')->increment('age');
// $num = DB::table('student')->decrement('age');
var_dump($num);

结果(自增自减结果形式相同):



Laravel学习过程之基础知识学习和使用(二)_基础知识_26

Laravel学习过程之基础知识学习和使用(二)_数据库操作_27

有条件自增(自减)时,仅更新满足条件的数据记录:

在StudentController控制器的query1方法中写如下内容:

$num = DB::table('student')->where('id',8)->increment('age');
// $num = DB::table('student')->where('id', 8)->decrement('age');
var_dump($num);

结果(自增自减形式相同):



Laravel学习过程之基础知识学习和使用(二)_基础知识_28

Laravel学习过程之基础知识学习和使用(二)_数据库操作_29

有条件且自增(自减)时,同时自增自减单位自定义,同步更新数据的方式:

在StudentController控制器的query1方法中写如下内容:

$num = DB::table('student')->where('id',8)->increment('age', 3,['name'=>'fangfang']);
// $num = DB::table('student')->where('id', 8)->decrement('age',3,['name'=>'fangfang']);
var_dump($num);

结果(自增自减形式相同):



Laravel学习过程之基础知识学习和使用(二)_数据库操作_30

Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_31

4. 使用查询构造器删除数据

l  delete

在StudentController控制器的query1方法中写如下内容:

$num = DB::table('student')->where('id', 1)->delete();
//一次删除多条记录:
$num = DB::table('student')->where('id', ’<=’, 5)->delete();
var_dump($num);

结果:



Laravel学习过程之基础知识学习和使用(二)_数据库操作_32

Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_33

truncate操作十分危险,是因为这是整表删除数据,且不可恢复,工作中谨慎使用!

在StudentController控制器的query1方法中写如下内容:

truncate不返回任何结果,即为删除成功。

DB::table('student')->truncate();

结果:



Laravel学习过程之基础知识学习和使用(二)_基础知识_34

5. 使用查询构造器查询数据

l  get()

获取数据表中的所有数据。

在StudentController控制器的query1方法中写如下内容:

$students = DB::table('student')->get();
dd($students);

结果:



Laravel学习过程之基础知识学习和使用(二)_Laravel框架_35

l  first()

获取数据表中的一条数据,第一条,

在StudentController控制器的query1方法中写如下内容:

$students =DB::table('student')->first();

或:

$students = DB::table('student')->orderBy(‘id’,‘desc)->first();
dd($students);

结果:



Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_36Laravel学习过程之基础知识学习和使用(二)_数据库操作_37

l  where()

获取满足条件的所有数据。

StudentController控制器的query1方法中写如下内容:

$students =DB::table('student')->where('id', '>=', 2)->get();
dd($students);

结果:



Laravel学习过程之基础知识学习和使用(二)_Laravel框架_38

多个条件:

StudentController控制器的query1方法中写如下内容:

$students =DB::table('student')->whereRaw('id > ? and age < ?', [2,21])->get();
dd($students);

结果:

Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_39

l  pluck()

获取结果集中所需的字段,同时第二个参数可以作为下标(lists方法也可以)。

StudentController控制器的query1方法中写如下内容:

$students = DB::table('student')->pluck(‘name’);
dd($students);

结果:



Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_40

l  lists()

同pluck功能相似,获取结果集中所需的字段,同时第二个参数可以作为下标(pluck方法也可以)。

StudentController控制器的query1方法中写如下内容:

$students =DB::table('student')->lists('name', 'id');dd($students);

结果:



Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_41

l  select()

获取数据表中指定的几个字段,而不是所有。

StudentController控制器的query1方法中写如下内容:

$students =DB::table('student')->select('id', 'name', 'age')->get();dd($students);

结果:



Laravel学习过程之基础知识学习和使用(二)_数据库操作_42

l  chunk()

分段查找数据表中的数据(相当于分页),直到查出所有数据,参数1是每次查询条数,参数2是匿名函数。

StudentController控制器的query1方法中写如下内容:

DB::table('student')->chunk(2, function($students){
echo "<pre>";
var_dump($students);
});

结果:



Laravel学习过程之基础知识学习和使用(二)_laravel学习过程_43

6. 查询构造器中的聚合函数

l  count()

获取数据表中记录数。

StudentController控制器的query1方法中写如下内容:

$num = DB::table('student')->count();
var_dump($num);

结果:



Laravel学习过程之基础知识学习和使用(二)_数据库操作_44

l  max()

获取数据表中相应字段数据的最大值。

StudentController控制器的query1方法中写如下内容:

$max = DB::table('student')->max('age');
var_dump($max);

结果:



Laravel学习过程之基础知识学习和使用(二)_数据库操作_45

l  min()

获取数据表中相应字段数据的最小值。

StudentController控制器的query1方法中写如下内容:

$min = DB::table('student')->min('age');
var_dump($min);

结果:



Laravel学习过程之基础知识学习和使用(二)_基础知识_46

l  avg()

获取数据表中相应字段数据的平均值。

StudentController控制器的query1方法中写如下内容:

$avg = DB::table('student')->avg('age');
var_dump($avg);

结果:



Laravel学习过程之基础知识学习和使用(二)_数据库操作_47

l  sum()

获取数据表中相应字段数据的和。

StudentController控制器的query1方法中写如下内容:

$sum = DB::table('student')->sum('age');
var_dump($sum);

结果:



Laravel学习过程之基础知识学习和使用(二)_Laravel框架_48

本系列的第三篇将讲解数据库操作的Equloment ORM内容,敬请关注。


                   ****************************只要思想不滑坡,办法总比困难多****************************