Laravel 基本操作

zhangsen發表於2019-05-30

才開始接觸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']);