免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能-創(chuàng)新互聯(lián)

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供郾城網(wǎng)站建設、郾城做網(wǎng)站、郾城網(wǎng)站設計、郾城網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、郾城企業(yè)網(wǎng)站模板建站服務,十余年郾城做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

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

  • php, nginx, mysql 服務正確啟用

  • 新建一個數(shù)據(jù)庫及其數(shù)據(jù)表

開啟服務我們打開上篇文章介紹的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

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

分別:

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

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

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

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

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

因為我們是mysql數(shù)據(jù)庫, 所以找到對應的mysql選項:

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

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

打開.env 文件, 我們填寫對應的mysql真實配置, 下圖:

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

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

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ù)文件內容 我們知道了密碼是:password , 因為是本地開發(fā)環(huán)境 這里就不更改密碼了,

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

另外文中沒有介紹項目的具體目錄結構, 建議大家看下官方文檔, 熟悉一下.

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

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

看到這里的同學也建議看一下 laravel 的路由文檔, 因為文中講的不是很細, 傳送門:

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

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

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

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請求方式有getpost 兩種.

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

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

此路由指定了get 方式請求, 路由為test/queryUsers , 邏輯會走向TestController 控制器的queryUsers 方法

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

注: laravel是一個mvc框架 , 關于mvc 的理解需要自己查些資料看看.

查詢

控制器在項目里的App/Http/Controllers 目錄里, 這里我新增一個TestController 控制器,TestController 里新增一個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;
 }
}

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

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

代碼里很亮眼的一行:

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

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

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

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

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

現(xiàn)在我們在Postman 新建一個請求, 如圖:

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

我們點擊send 得到 :

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

納尼?怎么沒有得到我們期望的結果, 很顯然哪里不對,我們再來看看路由的文檔:

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

文檔中我查找與post 字眼的相關馬跡, 看到:

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

原來是CSRF 造成的, 無論是前端同學還是后端同學, 應該都對這個詞不陌生,跨站請求偽造

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

App/Http/Middleware/VerifyCsrfToken.php

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

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

完成這步后我們再打開 postman, 點擊send 可以看到數(shù)據(jù)如期望返回:

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

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

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

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

此時需要修改下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(路由傳遞的值)的記錄,

查看結果, 符合預期:

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

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

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

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

any 則是匹配任意方式, 無論是通過get 還是post 方式請求, 都能得到我們想要的結果.

我們再看看上面我設計的goods表

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

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

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

然后TestController 里新增一個queryGoods 方法:

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

如期望一樣返回數(shù)據(jù):

[{
 id: 1,
 uid: 1,
 name: "測試商品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: "測試商品2",
 desc: null,
 img_urls: null,
 price: "290.00",
 old_price: "389.00",
 real_name: "歐陽欣欣",
 nickname: "小欣欣",
 head_url: null,
 age: null,
 gender: null,
 level: null
 }
]

但是用戶信息所有字段全部被返回了, 有些時候我們?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);
 }

關注下這行代碼:

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

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

新增

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

我們新增一個post 請求的路由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 里新增一個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":"小菲菲"}

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

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

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

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

編輯

我們新增一個put 請求的路由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 里新增一個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 來更新下它的nickname , postman 里添加請求參數(shù):

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

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

如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能

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

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

刪除

我們新增一個delete 請求的路由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 里新增一個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ù)庫里刪掉, 我們知道她的id 是 4, 我們根據(jù)id 來刪除它, 添加請求參數(shù):

{"id":"4"}

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

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


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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)網(wǎng)站建設公司,的支持。

分享標題:如何在Laravel中利用查詢構造器實現(xiàn)一個增刪改查功能-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://m.newbst.com/article0/deoooo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗標簽優(yōu)化品牌網(wǎng)站制作小程序開發(fā)外貿建站全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網(wǎng)站制作