成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Laravel 5.4 入門(mén)系列 4. 任務(wù)列表顯示(2)

banana_pi / 2089人閱讀

摘要:同時(shí),傳入?yún)?shù),即已存在的查詢(xún)。因此,更為常見(jiàn)的做法是在控制器中處理路由請(qǐng)求。

這一節(jié),我們進(jìn)一步完善上一節(jié)創(chuàng)建的任務(wù)列表。主要知識(shí)點(diǎn):

Eloquent Model

控制器

路由模型綁定

Eloquent Model 新增遷移

首先,我們?yōu)閿?shù)據(jù)庫(kù)表 tasks 新增一個(gè)字段 completed,用來(lái)表示任務(wù)是否完成:

$ php artisan make:migration add_completed_to_tasks_table --table=tasks

這次,我們使用 --table 指定已存在的表。接著添加具體字段:

// /database/migrations/2017_04_11_060132_add_completed_to_tasks_table.php
public function up()
{
    Schema::table("tasks", function (Blueprint $table) {
        $table->boolean("completed")->default(0);
    });
}

public function down()
{
    Schema::table("tasks", function (Blueprint $table) {
        $table->dropColumn("completed");
    });
}

執(zhí)行遷移:

$ php artisan migrate

如果我們想要回滾本次遷移,可以執(zhí)行:

$ php artisan migrate:rollback

將會(huì)執(zhí)行遷移任務(wù)的 down() 函數(shù):

上手 Eloquent Model

上一節(jié),我們使用 DB 來(lái)操縱數(shù)據(jù)庫(kù),在 Laravel 中,也叫做查詢(xún)構(gòu)造器。實(shí)際上,Laravel 提供了更為強(qiáng)大的用來(lái)與數(shù)據(jù)庫(kù)交互的工具:Eloquent Model

首先,我們來(lái)創(chuàng)建一個(gè)與 tasks 表格對(duì)應(yīng)的 Model:

$ php artisan make:model Task

現(xiàn)在,我們就可以使用 Eloquent 了,啟動(dòng)控制臺(tái):

$ php artisan tinker

可以先對(duì) Task 類(lèi)實(shí)例化,然后再進(jìn)行各種操作:

>>> $task = new AppTask;  # 新建一個(gè) Task 實(shí)例

新建任務(wù):

>>> $task->name = "新的任務(wù)"
>>> $task->completed = 1
>>> $task->save()  # 保存新實(shí)例

>>> $task 
=> AppTask {#674
     name: "新的任務(wù)",
     completed: 1,
     updated_at: "2017-04-11 06:14:10",
     created_at: "2017-04-11 06:14:10",
     id: 4,
   }

查詢(xún):

>>> $task->all()->toJson();  # 獲取數(shù)據(jù)并轉(zhuǎn)化為 json 格式
>>> $task->where("completed",1)->get(); # 查看完成的任務(wù)
>>> $task->pluck("name")->first(); # 獲取第一條記錄的 name 字段

也可以不實(shí)例,直接調(diào)用「門(mén)面」方法來(lái)操作:

>>> AppTask::first();  # 獲取第一條記錄
>>> AppTask::latest()->get(); # 按先后順序顯示記錄
自定義方法

剛才的例子中,有一行是用來(lái)查詢(xún)已完成的任務(wù)的:

>>> $task->where("completed",1)->get();

該查詢(xún)?cè)诤芏嗟胤蕉加锌赡芤玫剑瑸榱吮苊庵貜?fù)工作,我們將其封裝到 Model 中:

// /app/Task.php
class Task extends Model
{    
    public function completed()
    {
        return static::where("completed",1)->get();
    }

     public function unCompleted()
    {
        return static::where("completed",0)->get();
    }
}

我們定義了 completed()unCompleted() 方法分別獲取已完成和未完成的任務(wù)?,F(xiàn)在,需要重新啟動(dòng) tinker

>>> $task = new AppTask;
>>> $task->completed();
>>> $task->uncompleted()->pluck("name");

那么,我們是否可以直接使用 `Task::completed()呢?當(dāng)然可以,不過(guò)需要把方法改成靜態(tài)的,因?yàn)殪o態(tài)方法可以通過(guò)類(lèi)和實(shí)例訪(fǎng)問(wèn):

 public static function completed()
{
    return static::where("completed",1)->get();
}

 public static function unCompleted()
{
    return static::where("completed",1)->get();
}

這樣就可以通過(guò)類(lèi)直接訪(fǎng)問(wèn)了,依舊要重啟 tinker 才能生效

$ php artisan tinker
>>> AppTask::completed()
>>> AppTask::unComplete()

對(duì)于上述的方法,Laravel 提供了更為便利的方式實(shí)現(xiàn),叫做范圍查詢(xún):

public function scopeCompleted($query)
{
    return $query->where("completed",1);
}

 public function scopeUnCompleted($query)
{
    return $query->where("completed",0);
}

使用范圍查詢(xún),只需要在我們的方法前面加上 scope 就行,這樣就不用去定義靜態(tài)方法。同時(shí),傳入 $query 參數(shù),即已存在的查詢(xún)。我們只需要在此基礎(chǔ)上添加自己想要的查詢(xún)就可以了?,F(xiàn)在,可以方便的使用了:

$ php artisan tinker
>>> use AppTask;
>>> Task::completed()->get();
>>> Task::unCompleted()->pluck("name")

經(jīng)過(guò)對(duì) Eloquent 的初步學(xué)習(xí)之后,我們可以將之前的 DB 查詢(xún)換成 Eloquent 的:

// /routes/web.php
completed()->get();
    $unCompletedTasks = Task::latest()->unCompleted()->get();
    return view("tasks/index",compact("completedTasks","unCompletedTasks"));
});

Route::get("tasks/{task}", function($id) {
    $task = Task::findorFail($id);
    return view("tasks/show",compact("task"));
});

對(duì)應(yīng)的視圖文件也稍微修改下:

// /resources/views/tasks/index.blade.php

    

任務(wù)列表

未完成

已完成

控制器

之前,我們都是直接在路由處理請(qǐng)求,看上去好像沒(méi)什么問(wèn)題。但是,如果當(dāng)網(wǎng)站規(guī)模大起來(lái)之后,將路由和業(yè)務(wù)處理放在一起會(huì)變得難以維護(hù)。因此,更為常見(jiàn)的做法是在控制器中處理路由請(qǐng)求。

創(chuàng)建控制器

首先是控制器的創(chuàng)建:

$ php artisan make:controller TasksController

這樣就創(chuàng)建了一個(gè)空白的控制器了。

在控制器中處理請(qǐng)求

接下來(lái),我們就可以在控制器中定義不同的方法來(lái)處理路由請(qǐng)求了。先在路由中指定請(qǐng)求由哪個(gè)控制器的方法處理:

Route::get("tasks","TasksController@index");
Route::get("tasks/{task}","TasksController@show");

控制器里面可以把剛才路由的方法拷貝進(jìn)來(lái):

// /app/Http/Controllers/TasksController.php
completed()->get();
        $unCompletedTasks = Task::latest()->unCompleted()->get();
        return view("tasks/index",compact("completedTasks","unCompletedTasks"));
    }

    public function show($task)
    {
        $task = Task::findorFail($task);
        return view("tasks/show",compact("task"));
    }
}
路由模型綁定 自動(dòng)路由模型綁定

剛才的 show 方法,可以進(jìn)一步簡(jiǎn)寫(xiě)成:

// /app/Http/Controllers/TasksController.php
public function show(Task $task)
{
    return view("tasks/show",compact("task"));
}

功能完全一樣,如果覺(jué)得好奇,可以打印出 $task

// /app/Http/Controllers/TasksController.php
public function show(Task $task)
{    
    dd($task);
}

你會(huì)發(fā)現(xiàn),此時(shí)的 $task 已經(jīng)不是參數(shù)值了,而是從數(shù)據(jù)庫(kù)返回的對(duì)應(yīng)實(shí)例。也就是說(shuō),我們?yōu)?$task 添加了類(lèi)型提示 Task 之后,Laravel 自動(dòng)幫我們進(jìn)行了查詢(xún)。這就叫做自動(dòng)路由模型綁定。

手動(dòng)路由模型綁定

當(dāng)然,我們也可以手動(dòng)進(jìn)行綁定!比如我只想要顯示完成的任務(wù):

// /app/Providers/RouteServiceProvider.php
public function boot()
{   
    parent::boot();
    Route::bind("task",function($task){
        return AppTask::completed()->findOrFail($task);
    });
}

然后訪(fǎng)問(wèn)未完成的任務(wù),比如 task/1,就會(huì)報(bào)錯(cuò)。


參考:

PHP: Static(靜態(tài))關(guān)鍵字 - Manual

Eloquent: 入門(mén) | Laravel 5.4 中文文檔

Laravel 5.2 Error "Missing argument 1 for IlluminateAuthAuthManager::createDriver()"

Laravel HTTP 路由功能 | Laravel 5.4 中文文檔

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22707.html

相關(guān)文章

  • Laravel 5.4 入門(mén)系列 3. 任務(wù)列表顯示

    摘要:熟悉了路由與視圖的基本操作之后,我們來(lái)讓視圖顯示一個(gè)任務(wù)列表吧。創(chuàng)建遷移現(xiàn)在,我們就可以創(chuàng)建一個(gè)用來(lái)生成任務(wù)表的遷移了。 熟悉了路由與視圖的基本操作之后,我們來(lái)讓視圖顯示一個(gè)任務(wù)列表吧。主要知識(shí)點(diǎn): 數(shù)據(jù)遷移 查詢(xún)構(gòu)造器 數(shù)據(jù)庫(kù) 創(chuàng)建數(shù)據(jù)庫(kù) 首先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù): $ mysql -uroot -p mysql> create database laratasks; 數(shù)據(jù)庫(kù)配置 La...

    SunZhaopeng 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 7. 文章的顯示

    摘要:為的輔助方法,用于截取字符串的前個(gè)字符,然后返回前個(gè)字符加的格式。顯示某篇文章顯示某篇文章的比較簡(jiǎn)單,路由注意要放在下面,假如這樣那么,我們?cè)L問(wèn)的時(shí)候,會(huì)被當(dāng)成是的查詢(xún)參數(shù)。 文章的顯示功能比較簡(jiǎn)單,分為兩部分: 文章列表 具體的某篇文章 顯示文章列表 路由之前已經(jīng)定義好: Route::get(/posts,PostsController@index); 控制器: public ...

    kuangcaibao 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 5. 博客通用布局

    摘要:接下來(lái)執(zhí)行遷移即可通用布局通用布局首先是博客首頁(yè),定義路由控制器視圖博客首頁(yè)訪(fǎng)問(wèn)下網(wǎng)站根目錄,顯示博客首頁(yè),框架基本搭建完成了。首先是通用布局通用布局里面除了使用之外,還使用了,用于加載其他模板。 5. 博客的通用布局 初始化 創(chuàng)建控制器、模型、遷移 博客的核心是文章,可以先來(lái)實(shí)現(xiàn)和文章有關(guān)的功能,根據(jù)前幾節(jié)的介紹可知,我們至少需要?jiǎng)?chuàng)建這幾類(lèi): PostsController:控制器...

    xuweijian 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 9. 注冊(cè)與登錄,用戶(hù)關(guān)聯(lián)

    摘要:本節(jié)將實(shí)現(xiàn)文章評(píng)論與用戶(hù)關(guān)聯(lián)的功能。關(guān)系定義首先修改與表,增加字段增加全部回滾并重新執(zhí)行遷移添加用戶(hù)表與文章表評(píng)論表的一對(duì)多關(guān)系添加文章評(píng)論表與用戶(hù)表的多對(duì)一關(guān)系同時(shí),評(píng)論表的字段增加。同時(shí),我們還自定義了返回的錯(cuò)誤信息。 本節(jié)將實(shí)現(xiàn)文章、評(píng)論與用戶(hù)關(guān)聯(lián)的功能。 關(guān)系定義 首先修改 posts 與 comments 表,增加 user_id 字段 /database/migratio...

    smallStone 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 13. 終篇: 小白也能看懂的 Laravel 核心概念講解

    摘要:但是服務(wù)通常由服務(wù)提供者來(lái)管理的。小結(jié)通過(guò)上述的例子,基本上可以理解服務(wù)容器和服務(wù)提供者的使用。懂得了服務(wù)容器和服務(wù)提供者,理解門(mén)面也就不難了。 自動(dòng)依賴(lài)注入 什么是依賴(lài)注入,用大白話(huà)將通過(guò)類(lèi)型提示的方式向函數(shù)傳遞參數(shù)。 實(shí)例 1 首先,定義一個(gè)類(lèi): /routes/web.php class Bar {} 假如我們?cè)谄渌胤揭褂玫?Bar 提供的功能(服務(wù)),怎么辦,直接傳入?yún)?shù)即...

    BenCHou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<