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

31 篇文章 0 订阅
16 篇文章 0 订阅

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

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

二、学习和使用laravel

(一)、Laravel中的路由和MVC

1. 路由

l  路由简介

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

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

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

 

l  基本路由

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

参考文档:

http://www.cnblogs.com/tianguook/p/3726457.html

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";
         }
}

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方式绑定控制器的方式!


3. 视图

l  怎样新建视图

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

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

member-info php


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,并写入内容,如下:


路由内容同上;

控制器内容如下:

<?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}}


路由同上;

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
                            ]);
         }
}

模板视图显示结果:


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中提供了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数据库配置,如主机地址、端口号、数据库名、用户名、密码,具体根据自己的配置进修改。



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  访问结果


l  插入(新增)数据

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

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

访问结果:



说明插入数据成功。

l  修改数据

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

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

访问结果:



说明修改成功。

l  查询数据

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

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

访问结果:


说明查询成功。

l  删除数据

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

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

访问结果显示:



说明删除一个,成功。

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

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

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);

结果:



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

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

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

结果:



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);

结果:


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

l  更新为指定的内容

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

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

结果:


l  自增和自减

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

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

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

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


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

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

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

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



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

在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);

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



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

l  delete

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

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



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

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

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

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

结果:


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

l  get()

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

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

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

结果:


l  first()

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

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

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

或:

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

结果:


l  where()

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

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

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

结果:


多个条件:

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

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

结果:


l  pluck()

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

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

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

结果:


l  lists()

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

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

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

结果:


l  select()

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

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

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

结果:


l  chunk()

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

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

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

结果:


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

l  count()

获取数据表中记录数。

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

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

结果:

l  max()

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

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

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

结果:


l  min()

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

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

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

结果:


l  avg()

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

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

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

结果:


l  sum()

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

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

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

结果:


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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值