欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Laravel中的查詢構(gòu)造器實(shí)現(xiàn)增刪改查功能

 更新時(shí)間:2019年09月03日 13:17:38   作者:愿作輕羅  
這篇文章主要介紹了使用Laravel中的查詢構(gòu)造器實(shí)現(xiàn)增刪改查功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

引言

上一篇介紹了如何在windows環(huán)境下跑一個(gè) laravel 項(xiàng)目,這一篇寫如何使用 laravel 中的 查詢構(gòu)造器 實(shí)現(xiàn)增刪改查。

讀這篇文章時(shí)我默認(rèn)你已擁有如下知識(shí):

  • 了解php的基礎(chǔ)語(yǔ)法
  • 了解數(shù)據(jù)庫(kù)設(shè)計(jì)
  • 了解常用的sql查詢

正文

實(shí)現(xiàn)增刪改查前, 我們先準(zhǔn)備一些步驟:

  • php, nginx, mysql 服務(wù)正確啟用
  • 新建一個(gè)數(shù)據(jù)庫(kù)及其數(shù)據(jù)表

開啟服務(wù)我們打開上篇文章介紹的 Wnmp.exe -> Start all

然后cmd上鍵入命令:

D:/wnmp/Wnmp/php/php-cgi.exe -b 127.0.0.1:9000 -c D:/wnmp/Wnmp/php/php.ini

新建一個(gè)數(shù)據(jù)庫(kù), 我命名為 shop , 然后新建兩張表

分別:

goods -> 商品表 user -> 用戶表

數(shù)據(jù)表新建完成后, 我往里面隨意插入了幾條數(shù)據(jù), 下圖:

準(zhǔn)備步驟已經(jīng)完成, 我們打開上篇文章介紹的 testLaravel 項(xiàng)目

查看Laravel文檔能夠知道 數(shù)據(jù)庫(kù)配置config/database.php 里,

因?yàn)槲覀兪莔ysql數(shù)據(jù)庫(kù), 所以找到對(duì)應(yīng)的mysql選項(xiàng):

查看 database.php 文件的mysql配置我們能夠看到配置值是 變量 , 指向的是項(xiàng)目根目錄的 .env 文件

打開 .env 文件, 我們填寫對(duì)應(yīng)的mysql真實(shí)配置, 下圖:

配置大家看對(duì)應(yīng)的key值就知道是什么含義了, 這里提下數(shù)據(jù)庫(kù)密碼, 為什么是 password 呢? 查看Wnmp安裝目錄, 我們能看到有一個(gè) readme.txt 的文件, 文件的文本內(nèi)容如下:

Copyright (c) 2012 - 2019, Kurt Cancemi (kurt@x64architecture.com)
Donations are appreciated no matter if big or small.
https://wnmp.x64architecture.com/donate/

Wnmp is an easy Nginx, MariaDB and PHP environment for Windows.

The default login for MySQL/MariaDB/phpMyAdmin is: 
username: root
password: password

Note: you can change it via phpMyAdmin

根據(jù)文件內(nèi)容 我們知道了密碼是: password , 因?yàn)槭潜镜亻_發(fā)環(huán)境 這里就不更改密碼了,

但如果是生產(chǎn)環(huán)境, 大家使用集成環(huán)境包的時(shí)候一定要變更數(shù)據(jù)庫(kù)密碼.

另外文中沒有介紹項(xiàng)目的具體目錄結(jié)構(gòu), 建議大家看下官方文檔, 熟悉一下.

到這里項(xiàng)目的數(shù)據(jù)庫(kù)配置就已經(jīng)配完了, 關(guān)聯(lián)了本地的 shop 數(shù)據(jù)庫(kù).

現(xiàn)在我們需要配置一下 路由 , 所有的 Laravel 路由 的配置都在根目錄的 routes 里, routes 目錄中有4個(gè)路由配置文件, 這里不談其中區(qū)別, 只關(guān)注 web.php , 后面所有路由我們都在此文件里追加.

看到這里的同學(xué)也建議看一下 laravel 的路由文檔, 因?yàn)槲闹兄v的不是很細(xì), 傳送門:

https://learnku.com/docs/lara...

順便一說(shuō), 我個(gè)人選擇 laravel 作為深入學(xué)習(xí)的php框架, laravel優(yōu)雅的路由是我選擇它的一個(gè)重要原因.

我這里先寫幾個(gè)路由, 大家感受一下:

Route::get('test/queryUsers',['uses' => 'TestController@queryUsers']);
Route::post('test/queryUsers',['uses' => 'TestController@queryUsers']);
Route::get('test/queryUsers/{id}',['uses' => 'TestController@queryUsers']);

Route::match(['get','post'],'test/queryUsers',['uses' => 'TestController@queryUsers']);
Route::any('test/queryUsers',['uses' => 'TestController@queryUsers']);

我們知道熟知的http請(qǐng)求方式有 getpost 兩種.

a. 我們來(lái)依次解析上面的路由, 先看第1條:

Route::get('test/queryUsers',['uses' => 'TestController@queryUsers']);

此路由指定了 get 方式請(qǐng)求, 路由為 test/queryUsers , 邏輯會(huì)走向 TestController 控制器的 queryUsers 方法

這里出現(xiàn)了兩個(gè)名詞 控制器方法

注: laravel是一個(gè) mvc框架 , 關(guān)于 mvc 的理解需要自己查些資料看看.

查詢

控制器在項(xiàng)目里的 App/Http/Controllers 目錄里, 這里我新增一個(gè) TestController 控制器, TestController 里新增一個(gè) queryUsers 方法:

<?php

namespace App\Http\Controllers;
use app\Member;
use Illuminate\Support\Facades\DB;
use Symfony\Component\Routing\Annotation\Route;

class TestController extends Controller
{
 public function queryUsers() {
 $users = DB::table('user')->get();
 return $users;
 }
}

我們先來(lái)看結(jié)果, 地址欄鍵入(域名 + 路由): http://test.lara.com/test/queryUsers :

代碼里很亮眼的一行:

DB::table('user')->get();

這行代碼表示查詢 shop數(shù)據(jù)庫(kù) user 表的全部數(shù)據(jù), 所以我們看到 user 表中的3條記錄都被返回了.

b. 現(xiàn)在我們來(lái)解析上面路由的第2條:

Route::post('test/queryUsers',['uses' => 'TestController@queryUsers']);

這條路由和第1條路由只有一個(gè) post 的區(qū)別, 沒錯(cuò), 這是一個(gè)post請(qǐng)求的路由, 我們知道post請(qǐng)求方式無(wú)法在瀏覽器地址欄鍵入路由來(lái)得到結(jié)果, 所以我們需要使用一個(gè)工具 Postman , 這是個(gè)好東西, 如果有同學(xué)沒用過或是不知道它, 建議查一下熟悉一下, 文中不介紹它.

現(xiàn)在我們?cè)?Postman 新建一個(gè)請(qǐng)求, 如圖:

我們點(diǎn)擊 send 得到 :

納尼?怎么沒有得到我們期望的結(jié)果, 很顯然哪里不對(duì),我們?cè)賮?lái)看看路由的文檔:

https://learnku.com/docs/lara...

文檔中我查找與 post 字眼的相關(guān)馬跡, 看到:

原來(lái)是 CSRF 造成的, 無(wú)論是前端同學(xué)還是后端同學(xué), 應(yīng)該都對(duì)這個(gè)詞不陌生, 跨站請(qǐng)求偽造

laravel 中為了解決 CSRF 這個(gè)隱患, 默認(rèn)有保護(hù)機(jī)制, 我們需要配置 CSRF 白名單 , 根據(jù)文檔, 我們知道 CSRF 白名單 的配置在 VerifyCsrfToken 中間件里, VerifyCsrfToken 中間件所在路徑:

App/Http/Middleware/VerifyCsrfToken.php

打開文件, 添加 CSRF 白名單 ,

protected $except = [
 'http://test.lara.com/test/queryUsers',
 ];

完成這步后我們?cè)俅蜷_ postman, 點(diǎn)擊 send 可以看到數(shù)據(jù)如期望返回:

c. 現(xiàn)在我們來(lái)解析上面路由的第3條:

Route::get('test/queryUsers/{id}',['uses' => 'TestController@queryUsers']);

可以看出這條路由的區(qū)別在于路由末尾的 {id} , 開發(fā)中我們會(huì)有這樣的需求, 前端傳遞一個(gè)用戶id, 后端返回這個(gè)id對(duì)應(yīng)的該用戶信息

此時(shí)需要修改下 TestController 控制器 queryUsers 方法:

public function queryUsers() {
 $id = request()->id; // 此種方式獲取參數(shù)
 $users = DB::table('user')->where('id', $id)->get();
 return json_encode($users);
 }

白話文解釋一下這條sql: 在table表里查詢id = $id(路由傳遞的值)的記錄,

查看結(jié)果, 符合預(yù)期:

d. 現(xiàn)在我們來(lái)解析上面路由的第4條和第5條:

Route::match(['get','post'],'test/queryUsers',['uses' => 'TestController@queryUsers']);
Route::any('test/queryUsers',['uses' => 'TestController@queryUsers']);

這倆路由我就不演示了, 分別解釋一下, match 里路由為指定的請(qǐng)求方式, 一種或多種,

any 則是匹配任意方式, 無(wú)論是通過 get 還是 post 方式請(qǐng)求, 都能得到我們想要的結(jié)果.

我們?cè)倏纯瓷厦嫖以O(shè)計(jì)的goods表

我們能看到這兩條數(shù)據(jù)不知道創(chuàng)建的用戶是誰(shuí), 但是有uid值, 這時(shí)候我們希望一個(gè)接口既返回商品信息又能夠讓我知道創(chuàng)建者是誰(shuí), 此時(shí)就需要用到多表聯(lián)查了, 我們新增一個(gè)路由:

Route::get('test/queryGoods',['uses' => 'TestController@queryGoods']);

然后 TestController 里新增一個(gè) queryGoods 方法:

public function queryGoods() {
 $goods = DB::table('goods')
   ->leftJoin('user', 'goods.uid', '=', 'user.id')
   ->get();
 return json_encode($goods);
 }

如期望一樣返回?cái)?shù)據(jù):

[{
 id: 1,
 uid: 1,
 name: "測(cè)試商品1",
 desc: null,
 img_urls: null,
 price: "99.00",
 old_price: "78.00",
 real_name: "陳云",
 nickname: "窮搖.",
 head_url: null,
 age: null,
 gender: null,
 level: null
 },
 {
 id: 2,
 uid: 2,
 name: "測(cè)試商品2",
 desc: null,
 img_urls: null,
 price: "290.00",
 old_price: "389.00",
 real_name: "歐陽(yáng)欣欣",
 nickname: "小欣欣",
 head_url: null,
 age: null,
 gender: null,
 level: null
 }
]

但是用戶信息所有字段全部被返回了, 有些時(shí)候我們?yōu)榱税踩? 只需要返回指定字段, 比如我們只需要返回 user 表中的 real_namehead_url 字段, 那么我們就需要做一下字段的約束:

public function queryGoods() {
 $goods = DB::table('goods')
   ->leftJoin('user', 'goods.uid', '=', 'user.id')
   ->select('goods.*', 'user.real_name', 'user.head_url')
   ->get();
 return json_encode($goods);
 }

關(guān)注下這行代碼:

select('goods.*', 'user.real_name', 'user.head_url')

這行代碼表示返回goods表中的 所有字段 以及user表中的 real_namehead_url 字段, 就完美達(dá)到了我們想要的結(jié)果.

新增

至此查詢已經(jīng)基本寫的差不多了, 我們開始向數(shù)據(jù)表里 新增 數(shù)據(jù)

我們新增一個(gè) post 請(qǐng)求的路由 test/addUser :

Route::post('test/addUser',['uses' => 'TestController@addUser']);

添加 CSRF 路由白名單

protected $except = [
 'http://test.lara.com/test/queryUsers',
 'http://test.lara.com/test/addUser',
 ];

然后 TestController 里新增一個(gè) addUser 方法:

public function addUser() {
 $real_name = request()->real_name;
 $nickname = request()->nickname;

 DB::table('user')->insert(
  ['real_name' => $real_name, 'nickname' => $nickname]
 );

 $users = DB::table('user')->get();
 return json_encode($users);
 }

打開 postman , 添加參數(shù):

{"real_name":"劉亦菲","nickname":"小菲菲"}

點(diǎn)擊send, 發(fā)現(xiàn)數(shù)據(jù)如期望一樣正確插入.

查詢構(gòu)造器提供 insert 方法用于插入記錄到數(shù)據(jù)庫(kù)中。 insert 方法接收數(shù)組形式的字段名和字段值進(jìn)行插入操作

DB::table('user')->insert(
  ['real_name' => $real_name, 'nickname' => $nickname]
 );

編輯

我們新增一個(gè) put 請(qǐng)求的路由 test/updateUser :

同樣添加 CSRF

Route::put('test/updateUser',['uses' => 'TestController@updateUser']);

路由白名單

protected $except = [
 'http://test.lara.com/test/queryUsers',
 'http://test.lara.com/test/addUser',
 'http://test.lara.com/test/updateUser',
 ];

然后 TestController 里新增一個(gè) updateUser 方法:

public function updateUser() {
 $id = request()->id;
 $nickname = request()->nickname;
 
 DB::table('user')
  ->where('id', $id)
  ->update(['nickname' => $nickname]);

 $users = DB::table('user')->get();
 return json_encode($users);
 }

打開 postman , 我們知道剛剛新增的記錄返回的 劉亦菲 的id是4, 我們根據(jù) id 來(lái)更新下它的 nickname , postman 里添加請(qǐng)求參數(shù):

{"id":"4", "nickname": "小阿菲~"}

點(diǎn)擊send, 發(fā)現(xiàn)數(shù)據(jù)如期望一樣正確更新.

查詢構(gòu)造器提供 update 方法用于更新已有的記錄。 接受包含要更新的字段及值的數(shù)組

->where('id', $id)->->update(['nickname' => $nickname]);

刪除

我們新增一個(gè) delete 請(qǐng)求的路由 test/deleteUser :

Route::delete('test/deleteUser',['uses' => 'TestController@deleteUser']);

同樣添加 CSRF 路由白名單

protected $except = [
 'http://test.lara.com/test/queryUsers',
 'http://test.lara.com/test/addUser',
 'http://test.lara.com/test/updateUser',
 'http://test.lara.com/test/deleteUser',
 ];

然后 TestController 里新增一個(gè) deleteUser 方法:

public function deleteUser() {
 $id = request()->id;

 DB::table('user')
  ->where('id', $id)
  ->delete();

 $users = DB::table('user')->get();
 return json_encode($users);
 }

打開 postman , 我們現(xiàn)在想把 劉亦菲 的記錄在數(shù)據(jù)庫(kù)里刪掉, 我們知道她的 id 是 4, 我們根據(jù) id 來(lái)刪除它, 添加請(qǐng)求參數(shù):

{"id":"4"}

點(diǎn)擊send, 發(fā)現(xiàn)數(shù)據(jù)如期望一樣正確刪除 (已經(jīng)沒有id為4的記錄).

laravel中查詢構(gòu)造器可以使用 delete 方法從表中刪除記錄。添加 where 子句來(lái)約束 delete 的條件:

->where('id', $id)->delete();

文章有很多方法沒有介紹到, 建議需要學(xué)習(xí)的同學(xué)看下文檔, 傳送門:

https://learnku.com/docs/lara...

總結(jié)

以上所述是小編給大家介紹的使用Laravel中的查詢構(gòu)造器實(shí)現(xiàn)增刪改查功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Zend Framework緩存Cache用法簡(jiǎn)單實(shí)例

    Zend Framework緩存Cache用法簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Zend Framework緩存Cache用法,以簡(jiǎn)單實(shí)例形式分析了Zend Framework使用緩存的具體步驟,配置文件與Cache緩存具體使用技巧,需要的朋友可以參考下
    2016-03-03
  • PHP多維數(shù)組指定多字段排序的示例代碼

    PHP多維數(shù)組指定多字段排序的示例代碼

    本篇文章主要介紹了PHP多維數(shù)組指定多字段排序的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-05-05
  • PHPMYADMIN 簡(jiǎn)明安裝教程 推薦

    PHPMYADMIN 簡(jiǎn)明安裝教程 推薦

    簡(jiǎn)單的說(shuō),phpmyadmin就是一種mysql的管理工具,安裝該工具后,即可以通過web形式直接管理mysql數(shù)據(jù),而不需要通過執(zhí)行系統(tǒng)命令來(lái)管理,非常適合對(duì)數(shù)據(jù)庫(kù)操作命令不熟悉的數(shù)據(jù)庫(kù)管理者,下面我就說(shuō)下怎么安裝該工具
    2010-03-03
  • apache集成php7.3.5的詳細(xì)步驟

    apache集成php7.3.5的詳細(xì)步驟

    這篇文章主要介紹了如何讓apache集成php7.3.5詳細(xì)步驟,由于僅需要 apache 和 php,不其要其他的東西,所以未選擇集成包,手動(dòng)配置 apache,讓其支持 php。,需要的朋友可以參考下
    2019-06-06
  • Yii2使用駝峰命名的形式訪問控制器的示例代碼

    Yii2使用駝峰命名的形式訪問控制器的示例代碼

    這篇文章主要介紹了Yii2使用駝峰命名的形式訪問控制器的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Zend Framework常用校驗(yàn)器詳解

    Zend Framework常用校驗(yàn)器詳解

    這篇文章主要介紹了Zend Framework常用校驗(yàn)器,結(jié)合實(shí)例形式總結(jié)分析了Zend Framework的日期、數(shù)組、正則及自定義校驗(yàn)器,需要的朋友可以參考下
    2016-12-12
  • PHP完整的日歷類(CLASS)

    PHP完整的日歷類(CLASS)

    PHP完整的日歷類(CLASS)...
    2006-11-11
  • smarty內(nèi)置函數(shù)foreach用法實(shí)例

    smarty內(nèi)置函數(shù)foreach用法實(shí)例

    這篇文章主要介紹了smarty內(nèi)置函數(shù)foreach用法,實(shí)例分析了smarty內(nèi)置的foreach函數(shù)使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2015-01-01
  • Thinkphp5.1獲取項(xiàng)目根目錄以及子目錄路徑的方法實(shí)例講解

    Thinkphp5.1獲取項(xiàng)目根目錄以及子目錄路徑的方法實(shí)例講解

    這篇文章主要介紹了Thinkphp5.1獲取項(xiàng)目根目錄以及子目錄路徑的方法實(shí)例講解,希望正在學(xué)習(xí)TP框架的同學(xué)可以跟著小編一起來(lái)學(xué)習(xí)研究下
    2021-03-03
  • PHP使用curl制作簡(jiǎn)易百度搜索

    PHP使用curl制作簡(jiǎn)易百度搜索

    這篇文章主要為大家詳細(xì)介紹了PHP使用curl制作簡(jiǎn)易百度搜索的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評(píng)論