1. 程式人生 > >Larave5.*框架 資料庫的CURD增刪改查操作教程

Larave5.*框架 資料庫的CURD增刪改查操作教程

Laravel提供了3種操作資料庫方式:DB facade(原始方式)、查詢構造器和Eloquent ORM。下面我將逐一講解。

資料庫的配置檔案在config目錄下的database.php裡。開啟這個檔案,找到MySQL的配置項。


這裡有個env,它其實是呼叫了laravel根目錄下的.env檔案,這個檔案儲存了資料庫的配置資訊。開啟它。修改為專案的資料庫資訊即可。


請自行建一個數據庫,其中資料庫得包含vipinfo表,並且插入一些資料,以方便下面使用。表的結構如下圖。

一、資料庫操作之DB facade

   在app->Http->Controllers目錄下新建一個控制器StudentController.php。

 StudentController.php程式碼如下:

  1. <?php   
  2. namespace App\Http\Controllers;  
  3. use Illuminate\Support\Facades\DB;  
  4. class StudentController extends Controller {  
  5. }  
  1.查詢操作

  在Student控制器裡新增一個test1方法,查詢用的是DB類的靜態方法select(),引數是原生的sql語句,返回的是一個二維陣列。dd()是laravel提供的方法,可以將一個數組以節點樹的形式展示出來。具體程式碼如下:

  1. public
    function test1()  
  2. {  
  3.     $student=DB::select("select * from userinfo");  
  4.     //返回一個二維陣列  $student
  5.     var_dump($student);  
  6.         //以節點樹的形式輸出結果
  7.     dd($student);  
  8. }  
 路由配置: Route::get('test1',['uses'=>'[email protected]']);

 URL訪問:http://localhost/laravel/public/index.php/test1 ,則會打印出結果。

 2.新增操作

新增使用的是DB類的靜態方法insert(),第一個引數是sql語句,第二個引數是一個數組,數組裡放要插入的資料。這裡?是佔位符,通過資料庫介面層pdo的方式,達到防sql注入的目的。返回的是執行的結果。插入成功則返回true,否則為false。

  1. $bool=DB::insert("insert into vipinfo(vip_ID,vip_name,vip_type,vip_fenshu)   
  2.             values(?,?,?,?)",[5,'小明','出行',670]);  
  3. var_dump($bool);  
  4. //新增成功則返回true。
3. 更新操作

更新使用的是DB類的靜態方法update(),第一個引數是sql語句,第二個引數是一個數組,數組裡的元素分別對應sql語句裡的問號。更新成功返回true。

  1. $bool=DB::update('update vipinfo set vip_fenshu= ? where vip_ID= ? ',[700,5]);  
  2. var_dump($bool);  //更新成功返回true
4. 刪除操作

刪除使用的是DB類的靜態方法delete(),第一個引數是sql語句,第二個引數是一個數組,數組裡的元素分別對應sql語句裡的問號。返回的是刪除的行數。

  1. $num=DB::delete('delete from vipinfo where vip_ID= ?',[5]);  
  2. echo$num;  

二、資料庫操作之查詢構造器

laravel查詢構造器提供了方便流暢的介面,用來建立及執行資料庫查詢語法。使用了pdo引數繫結,使應用程式免於sql注入,因此傳入的引數不需要額外轉義特殊字元。基本上可以滿足所有的資料庫操作,而且在所有支援的資料庫系統上都可以執行。

1.使用查詢構造器實現增刪改查

1)新增

$bool=DB::table("vipinfo")->insert(['vip_ID'=>6,'vip_name'=>'zls','vip_type'=>"出行",'vip_fenshu'=>800]);

echo $bool;  //返回bool值

 //如果想得到新增的id,則使用insertGetId方法

  $id=DB::table("vipinfo")->insertGetId(['vip_ID'=>5,'vip_name'=>'wyp','vip_type'=>"出行",'vip_fenshu'=>800]);

  echo $id;

 //插入多條資料

 $bool=DB::table("vipinfo")->insert([

        ['vip_ID'=>5,'vip_name'=>'wyp','vip_type'=>"出行",'vip_fenshu'=>800],

        ['vip_ID'=>6,'vip_name'=>'zls','vip_type'=>"出行",'vip_fenshu'=>800],

]);

echo $bool;  //返回bool值

(2)修改

$bool=DB::table("vipinfo")->where('vip_ID',6)->update(['vip_fenshu'=>500]);

echo $bool;

//自增

$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu");//自增1

$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu",3);//自增3

echo $bool;

//自減

$bool=DB::table("vipinfo")->where('vip_ID',6)->decrement("vip_fenshu");//自1

$bool=DB::table("vipinfo")->where('vip_ID',6)->decrement("vip_fenshu",3);//自增3

echo $bool;

//自增時再修改其他欄位

$bool=DB::table("vipinfo")->where('vip_ID',6)->increment("vip_fenshu",3,['vip_name'=>'dbdibi']);//自增3

(3)刪除

$num=DB::table("vipinfo")->where('vip_ID',6)->delete();//刪除1條

$num=DB::table("vipinfo")->where('vip_ID','>',4)->delete();//刪除多條

echo $num;  //刪除的行數

$num=DB::table("vipinfo")->truncate();//刪除整表,不能恢復,謹慎使用

(4)查詢

//get()返回多條資料

$student=DB::table("vipinfo")->get();

 var_dump($student);  

//first()返回1條資料

$student=DB::table("vipinfo")->first();  //結果集第一條記錄

$student=DB::table("vipinfo")->orderBy('vip_ID','desc')->first();//按vip_ID倒序排序

var_dump($student);  

//where()條件查詢

$student=DB::table("vipinfo")->where('vip_ID','>=',2)->get(); //一個條件   

$student=DB::table("vipinfo")->whereRaw('vip_ID> ? and vip_fenshu >= ?',[2,300])->get(); //多個條件

dd($student);

//pluck()指定欄位,後面不加get

$student=DB::table("vipinfo")->pluck('vip_name');

dd($student);

//lists()指定欄位,可以指定某個欄位作為下標

$student=DB::table("vipinfo")->lists('vip_name','vip_ID');   //指定vip_ID為下標

dd($student);

$student=DB::table("vipinfo")->lists('vip_name');   //不指定下標,預設下標從0開始

//select()指定某個欄位

$student=DB::table("vipinfo")->select('vip_name','vip_ID')->get();

dd($student);

//chunk()每次查n條

$student=DB::table("vipinfo")->chunk(2,function($students){  //每次查2條

    var_dump($students);

    if(.......) return false;  //在滿足某個條件下使用return就不會再往下查了

});

2.使用聚合函式

//count()統計記錄條數

$nums=DB::table("vipinfo")->count();

echo $nums;

//max()某個欄位的最大值,同理min是最小值

$max=DB::table("vipinfo")->max("vip_fenshu");

echo $max;

//avg()某個欄位的平均值

$avg=DB::table("vipinfo")->avg("vip_fenshu");

echo $avg;

//sum()某個欄位的和

$sum=DB::table("vipinfo")->sum("vip_fenshu");

echo $sum;


四、資料庫操作之 - Eloquent ORM 

1.簡介、模型的建立及查詢資料

簡介:laravel所自帶的Eloquent ORM 是一個ActiveRecord實現,用於資料庫操作。每個資料表都有一個與之對應的模型,用於資料表互動。

建立模型,在app下建立一個Student.php。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model{

    //指定表名

protected $table= 'vipinfo';

//指定主鍵

protected $primaryKey= 'vip_ID';

}

Student控制器裡增加一個方法test3,配置路由

public function test3(){

// all()方法查詢所有資料

$studnets=Student::all();

dd($studnets);

//find()查詢一條,依據主鍵查詢。findOrFail()查詢不存在的記錄時會丟擲異常

$student=Student::find(5);  //主鍵為5的記錄

var_dump($student['attributes']);

//查詢構造器的使用,省略了指定表名

$student=Student::get();  

var_dump($student);

}

路由:Route::get('test3',['uses'=>'[email protected]']);

2.新增資料、自定義時間戳、批量賦值

//(1)使用save方法新增

laravel會預設維護created_at,updated_at兩個欄位,這兩個欄位都是儲存時間戳,整型11位的,因此使用時需要在資料庫新增這兩個欄位。如果不需要這個功能,只需要在模型里加一個屬性:

public $timestamps=false;

以及一個方法,可以將當前時間戳存到資料庫

protected function getDateFormat(){

return time();

}

這樣就不需要那兩個欄位了。

控制器裡寫:

$student=new Student();

//設定資料

$student->vip_name='xiaoming';

$student->vip_type='出行';

$student->vip_fenshu=900;

$bool=$student->save();  //儲存

echo $bool;

從資料庫裡取得某條記錄的時間戳時,預設取得的是按日期格式化好的時間戳,如果想取得原本的時間戳,則在模型裡增加asDateTime方法。

protected function asDateTime($val){

return $val;

}

(2)使用create方法新增時,需要在模型裡增加:

   //允許批量賦值的欄位

protected $fillable=['vip_name','vip_fenshu','vip_type'];

控制器裡寫:

Student::create(['vip_name'=>'mmm','vip_fenshu'=>999,'vip_type'=>'出行']);

3)firstOrCreate()以屬性查詢記錄,若沒有則新增

$student=Student::firstOrCreate(['vip_name'=>'mmm']);

echo $student;

4)firstOrNew()以屬性查詢記錄,若沒有則會建立新的例項。若需要儲存,則自己呼叫save方法()

$student=Student::firstOrNew(['vip_name'=>'mmm']);

$student->save();

echo $student;

3修改資料

//通過模型更新資料

$student=Student::find(2);

$student->vip_fenshu=10000;

$student->save(); //返回bool值

//通過查詢構造器更新

$num=Student::where('vip_ID','>',2)->update(['vip_fenshu'=>2000]);

echo $num;  //返回更新的行數

4.刪除資料

//(1)通過模型刪除資料

$student=Student::find(11);

$student->delete(); //返回bool值

//(2)通過主鍵刪除

 $num=Student::destroy(10); //刪除一條

 echo $num; //返回刪除的行數

 $num=Student::destroy(10,5); //刪除多條  或者$num=Student::destroy([10,5]);

 echo $num; //返回刪除的行數

相關推薦

Larave5.*框架 資料庫CURD刪改操作教程

Laravel提供了3種操作資料庫方式:DB facade(原始方式)、查詢構造器和Eloquent ORM。下面我將逐一講解。 資料庫的配置檔案在config目錄下的database.php裡。開啟這個檔案,找到MySQL的配置項。 這裡有個env,它其實

使用Spring框架下的JdbcTemplate 完成對資料庫刪改操作

還記得以前做的畢業設計是用的C3P0包,而當時並沒有使用到三大框架。現在畢業工作了,但是感覺要學的比工作深一層,一是提高自己的能力,二是以防萬一要換工作了,起碼掌握的東西能支撐自己以後的工作。不過這時候感覺自己就像java萌新(不,其實就是。) 現在第一篇技術相關的文章就寫

lua 連線mysql資料庫實現刪改操作(linux下示例)

(1)linux下連線資料庫: mysql -u root -p,-u 指定登入使用者,-p 指定密碼。 [[email protected]18 develop]$ mysql -u root -p Enter password: Welcome to the MySQ

JDBC操作----執行資料庫刪改 操作

      資料庫連線成功後,即可對資料庫進行具體的操作 一、執行資料庫資料的插入操作        使用PreparedStatement介面執行資料庫資料的插入操作,程式碼如下 : import java.sql.

Python的Django框架-資料庫查詢(刪改)

建立專案 django-admin startproject django_model 建立應用 python manage.py startapp model 配置應用 model, 編輯 django_model/settings.py

shell指令碼實現mysql資料庫刪改操作

一、shell指令碼實現mysql操作 通用的shell語句如下: mysql -hHOSTNAME−P{HOSTNAME} -PHOSTNAME−P{PORT} -uUSERNAME−p{USERNAME} -pUSERNAME−p{PASSWORD} -

mysql學習【第3篇】:資料庫刪改操作 資料庫之表操作,資料操作

資料庫之表操作,資料操作 注意的幾點:1.如果你在cmd中書命令的時候,輸入錯了就用\c跳出   2.\s檢視配置資訊

ASP.NET 使用類對資料庫進行刪改操作

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Dat

JDBC實現資料庫刪改操作例項

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import com.mysql.jdbc.PreparedStatement

java實現hbase資料庫刪改操作(新API)

操作環境:    java版本:    jdk 1.7以上    hbase 版本:1.2.x    hadoop版本:2.6.0以上 實現功能: 1,建立指定表        2,刪除指定表       3,根據表名,行鍵,列族,列描述符,值插入資料       4,根

MyBatis對資料庫刪改操作,簡單示例

之前一直實用Hibernate進行開發,最近公司在使用Mybatis,根據網上的示例,做了一個簡單的Demo,以便日後複習 使用XMl方式對映sql語句 總體結構如下圖 首先是建立一個工程,然後匯入兩個jar包,然後編寫mybatis的jdbc配置檔案Configu

Mybatis(一)—實現對資料庫刪改操作

1.Mybatis簡介 MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年11月遷移到Github。

java通過JDBC連線資料庫刪改操作

1.實戰資料庫資料的準備    建立資料庫(newsmanager),然後建立表news(id,title,content,type)和newstype(id,name),其中news的type和newstype的id為主外來鍵關係,如下圖圖   2.JDBC的介紹  

第六章:Django對mySQL資料庫刪改操作

上一章中介紹了用Django連線MySQL資料庫,本章介紹最基本的增刪改查操作,繼續利用上一章建立的表 一、新增資料 1、引入資料模組 from models import Blog

MyBatis框架搭建及刪改操作

一.搭建好myBatis的環境   1.引入jar包     (1).mybatis-3.2.7jar核心jar     (2).mysql核心jar     (3).junit-4.9.jar   2.建立mybatis全域性配置檔案SqlMapConfig.xm(名字自

python 連線mysql資料庫 進行刪改操作

1、在進行連線之前我們要確定我們已經安裝了python和mysql(開玩笑,沒有這個你怎麼連線那)至於安裝的過程在此略過, 2、因為要進行連線mysqldb 所有我們要匯入MySQLdb的模組,當然這個模組在預設的python中是沒有的,https://pypi.pytho

golang基礎-go對資料庫刪改操作

增加 查詢 修改 刪除 增加 首先看資料庫的結構: mysql> desc person; +----------+--------------+------+-----+---------+-------------

安卓中sqlite資料庫刪改操作的工具類

<span style="font-family:Microsoft YaHei;font-size:18px;">將資料庫中的增刪改查操作封裝成一個類,使用時直接呼叫很方便 package com.qianfeng.day14_sqliteopenhelpe

VS連線SQL Server資料庫刪改詳細教程(C#程式碼)

工具: 1.Visual Studio (我使用的是vs2013) 2.SQL Server  (我使用的是sql server2008) 操作: 1.開啟SQL Server,開啟後會看到資料庫的初始連結介面。(如下圖) 2.複製上圖中的“伺服器名稱”,然後點

MyBatis框架基於Annotation註解的資料庫刪改操作

 程式碼: User.java package com.bean; import java.io.Serializable; public class User implements Serial