Laravel 基本操作

才开始接触laravel,慕课网轻松学会Laravel笔记。

Laravel中的路由和控制器

1. 路由

  1. 路由简介
    1. 用户的请求准发给相应的程序进行处理
    2. 建立url和程序之间的映射
    3. 请求类型get、post、put、patch、delete
  2. 基本路由
  3. 多请求路由
  4. 路由参数
  5. 路由别名
  6. 路由群组
  7. 路由输出视图
//get
Route::get('basic1',function () {
    return 'hello';
});

Route::post('basic2',function (){
    return 'world';
});

//多请求方式
Route::match(['get','post'],'multy1',function() {
    return 'multy1';
});

//any
Route::any('multy2',function (){
    return 'multy2';
});

//路由参数
Route::get('user/{id}',function($id){
    return 'user-id-'.$id;
});

//可选参数
Route::get('user/{name?}',function($name = null){
    return 'user-name-'.$name;
});

Route::get('user/{name?}',function($name = 'cate'){
    return 'user-name-'.$name;
});

Route::get('user/{name?}',function($name = 'cate'){
    return 'user-name-'.$name;
})->where('name','[A-Za-z]+');

Route::get('user/{id}/{name?}',function($id,$name = 'cate'){
    return 'user-id-'. $id .'-name-'.$name;
})->where(['id'=>'[0-9]+','name'=>'[A-Za-z]+']);

//路由别名
Route::get('user/member-center',['as'=>'center',function(){
    return 'member-center';
}]);

//http://test.com/user/member-center
Route::get('user/member-center',['as'=>'center',function(){
   return route('center');
}]);

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

});
//http://test.com/multy2  multy2
//http://test.com/member/user/member-center http://test.com/member/user/member-center
//http://test.com/member/multy2  multy2

//路由中输出视图
Route::get('view',function (){
    return view('welcome');
});
//http://test.com/view

2. 控制器

  1. 怎么新建一个控制器
  2. 控制器和路由怎样进行关联
  3. 关联控制器后,路由的特性怎么用
php artisan make:controller UserController 
//会新建UserController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
    public function info()
    {
        return 'user-info';
    }
}

Route::get('user/info','UserController@info');

或者这样写

Route::get('user/info'['uses'=>'UserController@info'];

使用别名

Route::get('user/info',[
    'uses'=>'UserController@info',
    'as'=> 'userinfo'
]);

public function info()
    {
//        return 'user-info';
        return route('userinfo');
    }

路由传递参数

路由

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

或者

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

方法

public function index($id)
{
  return 'member-index'.$id;
}

3. 视图

  1. 怎样新建视图

    info.php

    Infi.blade.php

    http://test.com/member/12
    //member-info php
    
    //控制器
    return view('member-info');
    
    //视图(member-info php)
    member-info.php  

    blade

    return view('info');
    //视图
    info.blade.php
  2. 怎样输出视图

    return view('info');

    return view('member/info');

    return view ('member/info',['name'=>'winne']);

    在view下新建member目录

info.blade.php   //resources/views/member/info.blade.php

变量

 return view(
   'member/info',
   [
   'name'=>'care',
   'age' => 18
   ]
 );
 //view  {{$name}}

4. 模型

怎么新建模型

怎么使用模型

 return Member::getInfo();

 <?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
    public static function getInfo()
    {
        return 'hello';
    }
}

5. 数据库操作之 -DB facade

Laravel中提供DB facade(原始查找)、查询构造器和Eloquent ORM三种操作数据库方式

  1. 新建数据表与连接数据库
create table if not exists `student`(
    `id` int AUTO_INCREMENT primary key,
    `name` varchar(255) not null default''  COMMENT '姓名',
    `age` tinyint unsigned not null default 0 COMMENT '年龄',
    `sex` tinyint unsigned not null default 0 COMMENT '性别',
    `created_at` int not null default 0 COMMENT '新增时间',
    `updated_at` int not null default 0 COMMENT '修改时间'
) engine=innodb default charset=utf8 auto_increment = 1 comment ='学生表';
  1. 使用DB facade实现CURD
    public function test1()
    {
//        return 'test1';
        //查询
//        $student = DB::select('select * from student');
//        var_dump($student);
        //插入
//        $bool = DB::insert('insert into student(name,age) values (?,?)',['care',18]);
//        var_dump($bool);
        //更新
//        $num = DB::update('update  student set  age = ? where name = ?',[20,'care']);
//        var_dump($num);
        //查询
//       $data = DB::select('select * from student');
//       var_dump($data);
        //删除
//        $num = DB::delete('delete from student where id > ?',[1]);
//        var_dump($num);
    }

6. 数据库操作之 -查询构造器

1. 简介及新增数据

  1. 提供方便、流畅的接口,用来建立及执行数据库查询语法
  2. 使用PDO参数绑定,以保护应用程序免于SQL注入因此传入的参数不需额外转义特殊字符
  3. 基本可以满足所有的数据库操作,在所有支持的数据库系统上都可以执行

新增数据

//插入一条数据
$bool = DB::table('student')->insert(
  ['name'=>'care','age'=>18]
);
//返回插入数据的ID
$id = $bool = DB::table('student')->insertGetId(
  ['name'=>'care','age'=>18]
);
//插入多条数据
$bool  = DB::table('student')->insert([
  ['name'=>'winne','age'=>18],
  ['name'=>'tony','age'=>19]
]);

2. 修改数据

  1. 更新为指定的内容
  2. 自增和自减
$num = DB::table('student')
  ->where('id',3)
  ->update(['age'=>1]);
var_dump($num);
//自增
$num = DB::table('student')->increment('age');
$num = DB::table('student')->increment('age',2);
//自减
$num = DB::table('student')->decrement('age');
$num = DB::table('student')->decrement('age',2);
//条件操作
$num = DB::table('student')->where('id',4)->decrement('age',2);
//自增、自减同时更新
$num = DB::table('student')->where('id',4)->decrement('age',2,['name'=>'imooc']);

3. 删除数据

$num = DB::table('student')->where('id',7)->delete();
$num = DB::table('student')->where('id','>=',5)->delete();
DB::table('student')->truncate();

4. 查询数据

  1. get();
  2. first();
  3. where();
  4. pluck();
  5. lists();
  6. select();
  7. chunk();
//第一条
$data =  DB::table('student')->orderBy('id','desc')->first();
//按指定条件获取
$data =  DB::table('student')->where('id','>',1)->get();
//多条件
$data =  DB::table('student')->whereRaw('id > ? and age > ?',[1,3])->get();
//取字段
$data = DB::table('student')->pluck('name','id');
$data = DB::table('student')->pluck('name');
//取字段
$data = DB::table('student')->select('id','name','age')->get();
//分块
  echo '<pre>';
  DB::table('student')->orderBy('id')->chunk(2, function ($student) {
  var_dump($student);
  if(1){
  return false;

  }
    });

5. 聚合函数

  1. max()
  2. min()
  3. sum()
  4. count()
  5. avg()
 $num = DB::table('student')->sum('age');
 $num = DB::table('student')->max('age');
 $num = DB::table('student')->min('age');
 $num = DB::table('student')->sum('age');
 $num = DB::table('student')->avg('age');

7. 数据库操作之Eloquent ORM

  1. Eloquent ORM简介、模型的建立、查询数据
  2. 新增数据、自定义时间戳、批量赋值
  3. 修改数据
  4. 删除数据

1. Eloquent ORM简介、模型的建立、查询数据

模型的建立

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    protected $table = 'student';
    protected $primaryKey = 'id';
}

Eloquent ORM中查询

  1. all()、find()、findOrFail()
  2. 查询构造器在ORM中的使用
$student =  Student::all();
$student =  Student::get();
$student =  Student::find(1);
$student =  Student::findOrFail(1);
$student =  Student::sum('age');
$student =  Student::max('age');
$student =  Student::min('age');
$student =  Student::avg('age');
$student =  Student::sum('age');
$student = Student::where('id','>=',3)->orderBy('id','desc')->first();

2. 新增数据、自定义时间戳、批量赋值

 //使用模型新增数据
$student = new Student();
$student->name ='pony';
$student->age = 45;
$bool = $student->save();
var_dump($bool);

$student = Student::find(8);
echo $student->created_at;
echo date('Y-m-d H:i:s',$student->cteated_at);

//使用模型的create方法新增
$student = Student::create(
['name'=>'san','age'=>18]
);
dd($student);

//firstOrCreate  查找不到就创建
$student = Student::firstOrCreate(
  ['name'=>'sans']
);
dd($student);

//firstOrNew 查找不到就返回,创建需save
$student = Student::firstOrNew(
  ['name'=>'sanss']
);
$bool = $student->save();
dd($bool);

模型中时间的处理、批量赋值的处理

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    protected $table = 'student';

    protected $primaryKey = 'id';

    //指定允许批量赋值的字段
    protected $fillable = ['age','name'];

    //指定不允许批量赋值的字段
    protected $guarded = [];

    public $timestamps = true;

    public function getDateFormat()
    {
        return time();
    }

  protected function asDateTime($value) {
      return $value;
  }
}

3. ORM修改数据

  1. 通过模型更新
  2. 结合查询语句批量更新
//通过模型更新
$student = Student::find(8);
$student->name = 'two';
$bool = $student->save();
var_dump($bool);

//orm更新
$num = Student::where('id','>',9)->update(
         ['age'=>12]
  );
var_dump($num);

需要关闭模型中时间转换 asDateTime

4. ORM删除数据

  1. 根据模型删除
  2. 根据主键值删除
  3. 根据指定条件删除
//根据模型删除
$student = Student::find(12);
$bool = $student->delete();
var_dump($bool);

//根据主键id删除
$num = Student::destroy(11);
$num = Student::destroy(9,10);
$num = Student::destroy([6,8]);
dd($num);

//根据指定条件删除
$num = Student::where('id','>=',3)->delete();
dd($num);

8. Blade模板使用

  1. Blade模板引擎简介及模板继承的使用
  2. 基础语法及include的使用
  3. 流程控制
  4. 模板中的URL

Blade模板引擎简介

Blade并不限制你在视图(view)中使用原生PHP代码

所有Blade视图页面都将被编译成原生PHP代码并缓存起来,除非你的模板文件被修改了,否则不会重新编译。

模板继承

  1. section
  2. yield
  3. extands
  4. parent
@extends('layouts')

@section('header')
    @parent
    header
@stop

@section('sidebar')
    sidebar
@stop

@section('content')
    content
@stop

基础语法及include的使用

  1. 模板中输出变量
  2. 模板中调用PHP代码
  3. 原样输出
  4. 模板中的注释
  5. 引入子视图include的使用
@extends('layouts')

@section('header')
    @parent
    header
@stop

@section('sidebar')
    sidebar
@stop

@section('content')
    content
    <!-- 1. 模板中输出变量-->
    <p>{{$name}}</p>

    <!-- 2. 模板中调用PHP代码-->
    <p>{{time()}}</p>
    <p>{{date('Y-m-d H:i:s',time())}}</p>
    <p>{{in_array($name,$array) ? 'true' : 'false'}}</p>

    <p>{{var_dump($array)}}</p>
    <p>{{isset($name) ? $name :'default'}}</p>
    <p>{{$name or 'default'}}</p>

    <!-- 3. 原样输出-->
    <p>@{{$name}}</p>

    {{-- 4. 模板中的注释(浏览器看不到)--}}
    {{-- 5. 引入子视图 include--}}
    @include('student.common1',[
        'message'=>'我是错误信息'
    ])
@stop

被引入 resources/views/student/common1.blade.php

<p>我是include{{$message}}</p>

模板中的流程控制

  1. if
  2. unless (if取反 )
  3. for
  4. foreach
  5. forelse
@extends('layouts')

@section('header')
    @parent
    header
@stop

@section('sidebar')
    sidebar
@stop

@section('content')
    content

    <br>
    @if($name == 'care')
        I`m care
    @elseif($name == 'imooc')
        I`m imooc
    @else
        who am i?
    @endif

    <br>
    @if(in_array($name,$array))
        true
    @else
        false
    @endif

    <br>
    @unless($name != 'care')
        i`m care
    @endunless()

    <br>
    {{--@for($i = 0 ;$i<10;$i++)--}}
        {{--<p>{{$i}}</p>--}}
    {{--@endfor--}}

    <br>
    @foreach($students as $student)
        <p>{{$student->name}}</p>
    @endforeach

    <br>
    @forelse($students as $student)
        <p>{{$student->name}}</p>
    @empty
        <p>null</p>
    @endforelse
@stop

模板中的URL

  1. url
  2. action()
  3. route
 <a href="{{url('url')}}">url()</a>
 <br>
 <a href="{{action('StudentController@urlTest')}}">action()</a>
 <br>
 <a href="{{route('url')}}">route()</a>
 public function urlTest()
 {
         return 'urlTest';
 }

Route::get('url',['as'=>'url','uses'=>'StudentController@urlTest']);

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!