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 DB類SQL語句操作(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之中,這樣其他工程想獲取實體類資