1. 程式人生 > >Laravel模型類&DB類操作資料庫

Laravel模型類&DB類操作資料庫

一、使用DB類操作資料庫

配置好資料庫連線後,就可以使用DB類來執行查詢。DB類為每種查詢提供了相應方法:select, update, insert, delete和statement。

1、執行原生sql查詢

注意:原生sql語句中的資料表名,必須是包含字首的完整表名。

-> 執行 select/insert/update/delete 查詢
$results = DB::select('select * from users where id = ?', [1]);

select方法以陣列的形式返回結果集,陣列中的每一個結果都是一個PHP StdClass物件,從而允許你像下面這樣訪問結果值:

foreach ($results as $user) {
    echo $user->name;
}
-> 執行一個通用語句

有些資料庫語句不返回任何值,對於這種型別的操作,可以使用DB類的statement方法:該方法返回布林值true或false,代表語句執行成功或失敗。

DB::statement('drop table users');

2、查詢構建器

指定操作的資料表:

DB::table(表名);

注:查詢構建器中table方法中的表名,是不包含字首的表名。

-> 查詢資料

①獲取多條資料–get方法

$users = DB::table('users')->where('name', 'John')->get();

get方法返回包含結果集的Illuminate\Support\Collection,其中每一個結果都是PHP的StdClass物件例項。你可以像訪問物件的屬性一樣訪問欄位的值:

foreach ($users as $user) {
    echo $user->name;
}

②獲取一條資料–first方法
如果你只是想要從資料表中獲取一行資料,可以使用first方法,該方法將會返回單個StdClass物件:

$user = DB::table('users')->where('name', 'John')->first();
echo $user->name;

注:根據主鍵獲取一條資料–find方法
如果你想要根據主鍵值從資料表中獲取資料,可以使用find方法(必須傳遞引數):

//傳遞一個主鍵值,獲取一條資料
$user = DB::table('users')->find(1);

③聚合查詢(統計查詢)
查詢構建器還提供了多個聚合方法,如count, max, min, avg和 sum,你可以在構造查詢之後呼叫這些方法:

$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');

④select子句–select方法
當然,我們並不總是想要獲取資料表的所有列,使用select方法,你可以為查詢指定自定義的select子句:

$users = DB::table('users')->select('name', 'email as user_email')->get();

⑤where子句–where方法

$users = DB::table('users')
            ->where('votes', '>=', 100)
            ->get();
$users = DB::table('users')
            ->where('votes', '<>', 100)
            ->get();
$users = DB::table('users')
            ->where('name', 'like', 'T%')
            ->get();

還可以傳遞條件陣列到where函式:

$users = DB::table('users')->where(['id'=>'1'])->get();
$users = DB::table('users')->where([
    ['status', '=', '1'],
    ['subscribed', '<>', '1'],
])->get();
-> 插入資料
DB::table('users')->insert([
    ['email' => '[email protected]', 'votes' => 0],
    ['email' => '[email protected]', 'votes' => 0]
]);

自增ID
如果資料表有自增ID,使用insertGetId方法來插入記錄並返回ID值:

$id = DB::table('users')->insertGetId(
    ['email' => '[email protected]', 'votes' => 0]
);
-> 更新資料
DB::table('users')
            ->where('id', 1)
            ->update(['votes' => 1]);
這兩個方法都至少接收一個引數:需要修改的列。第二個引數是可選的,用於控制列值增加/減少的數目。
DB::table('users')->increment('votes');
DB::table('users')->increment('votes', 5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes', 5);
-> 刪除資料

查詢構建器還可以通過delete方法從表中刪除記錄:

DB::table('users')->delete();
DB::table('users')->where('votes', '>', 100)->delete();

清除整張表,也就是刪除所有列並將自增ID置為0,可以使用truncate方法:

DB::table('users')->truncate();

二、模型中的資料操作

增刪改查 (CURD : create update read delete)

Eloquent模型本身是一個功能強大的查詢構建器,可以通過模型呼叫DB類查詢構建器中的方法。模型本身也封裝了一些自己的方法,用於進行資料查詢、插入、更新、刪除等操作。

1、查詢一條資料

①呼叫find方法(必須傳遞引數)

// 通過主鍵獲取一條資料...
$manager = Manager::find(1);

②呼叫first方法(不需要傳遞引數)

// 獲取匹配查詢條件的第一條資料...
$manager = Manager::where('active', 1)->first();

注:通過模型呼叫find方法和first方法,返回值都是一個包含資料的模型物件。這個物件可以當做陣列來用,也可以呼叫toArray方法直接轉化為陣列。

// 通過主鍵獲取一條資料...
$manager = Manager::find(1)->toArray();

2、查詢多條資料(推薦get方法)

①呼叫模型本身的all方法

//呼叫模型的all方法 查詢所有資料
$managers = Manager::all();
//可以傳遞引數,指定要查詢的欄位
$managers = Manager::all('id', 'username');
或者 傳遞陣列格式的欄位引數
$managers = Manager::all(['id', 'username']);

注:all方法是模型本身封裝的一個靜態方法,只能直接呼叫,前面不能呼叫where等方法。
②呼叫find方法
還可以通過傳遞主鍵陣列來呼叫find方法,這將會返回匹配記錄集合:

//根據主鍵陣列查詢多條資料
$managers = Manager::find([1, 2, 3]);

③呼叫get方法(推薦)

//根據條件查詢資料
$managers = Manager::where('status', 1)->get();

注:查詢多條資料,返回的是一個包含模型物件的資料集合。

3、新增資料

可以通過模型呼叫查詢構建器的insert方法進行新增資料操作,這裡主要介紹模型的方法。

-> 靜態create方法新增資料

可以靜態呼叫create方法,傳遞資料陣列,進行批量欄位複製並新增。
使用create方法之前,必須先在模型中定義哪些屬性是可以進行賦值的,使用模型上的$fillable屬性即可實現。

控制器中呼叫模型的create方法:

$data = ['username' => 'admin100', 'status' => 1];
$manager = Manager::create($data);
$id = $manager->id;

create方法返回包含了插入資料的模型物件本身。

-> save方法新增資料(不推薦)
$manager = new Manager;
$manager->username = 'admin100';
$manager->save();

save方法返回值:成功時返回true,失敗時返回false。
新增成功後,可以通過模型呼叫id屬性,獲取新增記錄的主鍵值。

$id = $manager->id;

4、修改資料

-> update方法修改資料

通常還可以呼叫查詢構建器的update方法同時修改滿足條件的一條或多條資料。

//根據條件更新資料
$manager = Manager::where('id', 1)->update(['status' => 1]);
-> save方法修改資料(不推薦)

模型的save方法還可以用於更新資料表已存在的資料。

//先查詢到要修改的資料
$manager = Manager::find(1);
//設定想要更新的屬性
$manager->email = '[email protected]' ;
//呼叫save方法
$manager->save();

5、刪除資料(推薦destroy方法)

-> 模型本身的delete方法刪除資料

//先查詢到要刪除的資料
$manager = Manager::find(2);
//呼叫delete方法
$manager->delete();

-> 模型本身的靜態destroy方法刪除資料

//根據主鍵id刪除一條資料
Manager::destroy(2);
//根據多個主鍵id批量刪除資料
Manager::destroy([2,3]);
Manager::destroy(2,3);

-> 查詢構建器的delete方法刪除資料
可以根據where條件,直接呼叫查詢構建器的delete方法,刪除滿足條件的資料

//先查詢到要刪除的資料
Manager::where('id', 2)->delete();

6、軟刪除

-> 軟刪除

要啟用模型的軟刪除功能,可以使用模型上的Illuminate\Database\Eloquent\SoftDeletes這個trait :

namespace App\Http\Models;

use Illuminate\Database\Eloquent\Model;
//引入SoftDeletes 這個trait
use Illuminate\Database\Eloquent\SoftDeletes;

class Manager extends Model{
    //SoftDeletes 這個trait
use SoftDeletes;
//指定軟刪除欄位名稱
    protected $dates = ['deleted_at'];
}

進行以上設定後,呼叫模型本身的delete方法和destroy方法刪除資料,都會進行軟刪除。
deleted_at列將被設定為當前日期和時間,並且,當查詢一個使用軟刪除的模型時,被軟刪除的模型將會自動從查詢結果中排除。

-> 查詢被軟刪除的資料

被軟刪除資料將會自動從查詢結果中排除,但是,如果你想要被軟刪除的資料出現在查詢結果中,可以使用withTrashed方法:

$managers = Manager::withTrashed()->get();

也可以使用onlyTrashed方法只獲取軟刪除資料:

$managers = Manager::onlyTrashed()->get();
-> 恢復被軟刪除的資料

有時候你希望恢復一個被軟刪除的模型,可以使用restore方法:

$manager = Manager::withTrashed()->first();
$manager->restore();

你還可以在查詢中使用restore方法來快速恢復多個模型:

Manager::withTrashed()
        ->where('id', '>', 1)
        ->restore();
-> 永久刪除資料

有時候你真的需要從資料庫中刪除一個模型,可以使用forceDelete方法:

// 強制刪除單個模型例項...
$manager = Manager::find(1);
$manager->forceDelete();

三、where方法詳解

-> 簡單的where子句
//完整語法
where('欄位名', '表示式', '查詢條件')
//表示式為 等於號,可以省略不寫。
where('欄位名',  '查詢條件')
//用法
$managers = Manager::where('id', '>', 3)->get();

-> or語句

你可以通過方法鏈將多個where約束連結到一起,也可以新增or子句到查詢,orWhere方法和where方法接收引數一樣:

$managers = Manager::where('id', '>', 3)
                    ->orWhere('status', 1)
                    ->get();
-> 批量條件
$users = DB::table('users')->where(['id'=>'1'])->get();
$users = DB::table('users')->where([
    ['status', '=', '1'],
    ['subscribed', '<>', '1'],
])->get();
//基本語法
where(['欄位名'=> '欄位值'])
where([['欄位名', '比較表示式', '欄位值'],['欄位名', '比較表示式', '欄位值']])
-> 更多where子句

whereBetween
whereBetween方法驗證列值是否在給定值之間:

$users = DB::table('users')->whereBetween('votes', [1, 100])->get();

whereNotBetween
whereNotBetween方法驗證列值不在給定值之間:

$users = DB::table('users')->whereNotBetween('votes', [1, 100])->get();

whereIn/whereNotIn
whereIn方法驗證給定列的值是否在給定陣列中:

$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();

whereNotIn方法驗證給定列的值不在給定陣列中:

$users = DB::table('users')->whereNotIn('id', [1, 2, 3])->get();

whereNull/whereNotNull
whereNull方法驗證給定列的值為NULL:

$users = DB::table('users')->whereNull('updated_at') ->get();

whereNotNull方法驗證給定列的值不是NULL:

$users = DB::table('users')->whereNotNull('updated_at')->get();

whereDate / whereMonth / whereDay / whereYear
whereDate方法用於比較欄位值和日期:

$users = DB::table('users')->whereDate('created_at', '2016-10-10')->get();

whereMonth方法用於比較欄位值和一年中的指定月份:

$users = DB::table('users')->whereMonth('created_at', '10')->get();

whereDay方法用於比較欄位值和一月中的制定天:

$users = DB::table('users')->whereDay('created_at', '10')->get();

whereYear方法用於比較欄位值和指定年:

$users = DB::table('users')->whereYear('created_at', '2016')->get();

whereColumn
whereColumn方法用於驗證兩個欄位是否相等:

$users = DB::table('users')->whereColumn('first_name', 'last_name')->get();

還可以傳遞一個比較運算子到該方法:

$users = DB::table('users')->whereColumn('updated_at', '>', 'created_at')
            ->get();

還可以傳遞多條件陣列到whereColumn方法,這些條件通過and操作符進行連線:

$users = DB::table('users')
            ->whereColumn([
                ['first_name', '=', 'last_name'],
                ['updated_at', '>', 'created_at']
            ])->get();

相關推薦

Laravel模型&DB操作資料庫

一、使用DB類操作資料庫 配置好資料庫連線後,就可以使用DB類來執行查詢。DB類為每種查詢提供了相應方法:select, update, insert, delete和statement。 1、執行原生sql查詢 注意:原生sql語句中的資料表名,必須是包含字首

Laravel摘記之DB操作資料庫

laravel中的DB類為我們提供了兩個形式來操作資料庫 原生sql語句操作資料庫 構建器操作資料庫 建立測試控制器 (1)、執行原生 SQL 語句 配置好資料庫連線以後,DB類為我們提供select、update、insert、delete等方

Laravel框架學習(使用DB門面操作資料庫 原生SQL)

1、連線資料庫 Laravel中資料庫配置檔案為config/database.php,開啟該檔案,預設內容如下: <?php return [ //預設返回結果集為PHP物件例項 //具體返回結果可參考PDO.php(php P

SQLiteOpenHelper的簡化操作資料庫(api查詢方式)

<span style="font-family: Arial, Helvetica, sans-serif;">package com.sqf.sql.db;</span> import android.content.Context; impor

nodejs操作mongodb資料庫封裝DB

我使用到了nodejs的外掛mongoose,用mongoose操作mongodb其實蠻方便的。 關於mongoose的安裝就是 npm install -g mongoose 這個DB類的資料庫配置是基於auth認證的,如果您的資料庫沒有賬號與密碼則留空即可。 /** * mon

laravel DBSQL語句操作(CURD)

$user = DB::table('users')->where('name', 'John')->first(); var_dump($user->name);檢索單個列的行 複製程式碼程式碼如下: $name = DB::table('users')->where('n

.NET使用DAO.NET實體模型操作資料庫

一、新建專案 開啟vs2017,新建一個專案,命名為orm1   二、新建資料庫 開啟 SqlServer資料庫,新建資料庫 orm1,並新建表 student 。 三、新建 ADO.NET 實體資料模型 這裡點選 新建連線,新建

【discuzX2】/source/class/class_core.php文件中數據庫操作DB及db_mysql分析

mathjax fetch bus _for pre 影響 str sql_mod 進行 <?php /** * Discuz MySQL 類的支持 程序中一般不直接使用此類,而是使用DB類,DB類對db_mysql類中的方法又進行了二次封裝 * *

jedis工具:java操作redis資料庫

學完redis,需要在java客戶端中使用Jedis,作為連線redis的工具: JedisUtils工具類: public class JedisUtils{ //定義一個連線池物件: private final static JedisPool POOL; static {

mongodb 資料庫封裝DB

/** * mongoose操作類(封裝mongodb) */ var fs = require('fs'); var path = require('path'); var mongoose = require('mongoose'); var logger = r

PHP面向物件操作資料庫--MySQLI

自學PHP,這幾天學到了連線資料庫,乾脆把MySQLI的API全過一遍吧! MySQLI     代表PHP和Mysql資料庫之間的一個連線。     1.mysqli::affected_rows :         返回影響到資料表的行數         

php精闢程式碼欣賞,資料庫操作,封裝所有資料庫操作

下面是php各種程式碼庫,個人分享 <?php //******************************************************************* //此處構造一個數據庫操作類,封裝所有資料庫操作 //可以擴充套件便於後臺管理程

Python Flask,資料庫,SQLAlchemy,模型的定義,資料庫新增

  SQLAlchemy是一個ORM框架。flask-sqlalchemy是一個簡化了SQLAlchemy操作的flask擴充套件。 安裝flask-sqlalchemy: pip install flask-sqlalchemy 安裝Mysql驅動: &n

java連線MySQL資料庫DB底層框架程式碼實現

前言:用java連線MySQL資料庫程式碼都是十分固定的,所以直接將一些固定的程式碼寫在一個DBmanager類中可以省去許多重複的工作,連線不同MySQL資料庫只需改變user和password即可。為了方便大家,我已經將程式碼總結出來。 程式碼塊 i

Hibernate之*hbm.xml檔案和實體操作資料庫實現插入和查詢

一、實體類(Entity) package com.javademo; import java.util.Date; public class Event { private Long id; private String title;

laravel DB

DB 類操作資料庫    基本用法: DB::table('tableName'); 獲取操作tableName 表        增加資訊        對資

JAVA操作資料庫的一個通用

 import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; impo

android資料庫操作(二) 某實體的DAO操作

package com.iceboard.tccme.dao; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.c

使用Spring提供的三個JDBC模板(JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate)操作資料庫

一、JdbcTemplate是Spring中最基本的JDBC模板, 利用JDBC和簡單的索引引數查詢對資料庫進行簡單訪問 @Resource private JdbcTemplate jdbcTemplate;    Dao: package com.s.dao; imp

使用Mapstruct來進行domain實體與Entity模型之間的對映操作,減少之間程式碼轉化

轉載地址:http://blog.csdn.net/lu_ckid/article/details/54602057 在一個成熟可維護的工程中,細分模組後,domian工程最好不要被其他工程依賴,但是實體類一般存於domain之中,這樣其他工程想獲取實體類資