一、數(shù)據(jù)庫(kù)操作之DB facade (跟使用原生sql操作沒(méi)什么區(qū)別)
1.查詢操作
$student=DB::select("select * from user");
// 返回一個(gè)二維數(shù)組 $student
var_dump($student);
// 以節(jié)點(diǎn)樹的形式輸出結(jié)果
dd($student);
2.新增操作
第一個(gè)參數(shù)是sql語(yǔ)句应又,第二個(gè)參數(shù)是一個(gè)數(shù)組,數(shù)組里的元素分別對(duì)應(yīng)sql語(yǔ)句里的問(wèn)號(hào)
$bool=DB::insert("insert into user(name,sex,age) values(?,?,?)",['小明','女',670]);
var_dump($bool);
// 新增成功則返回true喧锦。
- 更新操作
第一個(gè)參數(shù)是sql語(yǔ)句读规,第二個(gè)參數(shù)是一個(gè)數(shù)組,數(shù)組里的元素分別對(duì)應(yīng)sql語(yǔ)句里的問(wèn)號(hào)
$bool=DB::update('update user set age= ? where ID= ? ',[20,5]);
var_dump($bool);
//更新成功返回true
- 刪除操作
第一個(gè)參數(shù)是sql語(yǔ)句燃少,第二個(gè)參數(shù)是一個(gè)數(shù)組,數(shù)組里的元素分別對(duì)應(yīng)sql語(yǔ)句里的問(wèn)號(hào)
$num=DB::delete('delete from user where ID= ?',[5]);
echo $num;
二铃在、數(shù)據(jù)庫(kù)操作之查詢構(gòu)造器
1.查詢操作
// get()返回多條數(shù)據(jù)
$student=DB::table("user ")->get();
var_dump($student);
// first()返回1條數(shù)據(jù)
$student=DB::table("user ")->first(); //結(jié)果集第一條記錄
$student=DB::table("user ")->orderBy('ID','desc')->first();//按ID倒序排序
var_dump($student);
// where()條件查詢
$student=DB::table("user ")->where('ID','>=',2)->get(); //一個(gè)條件
$student=DB::table("user ")->whereRaw('ID> ? and age>= ?',[2,10])->get(); //多個(gè)條件
dd($student);
// pluck()指定字段,后面不加get
$student=DB::table("user ")->pluck('name');
dd($student);
// lists()指定字段阵具,可以指定某個(gè)字段作為下標(biāo)
$student=DB::table("user ")->lists('name','ID'); //指定ID為下標(biāo)
dd($student);
$student=DB::table("user ")->lists('name'); //不指定下標(biāo),默認(rèn)下標(biāo)從0開始
// select()指定某個(gè)字段
$student=DB::table("user ")->select('name','ID')->get();
dd($student);
// chunk()每次查n條
$student=DB::table("user ")->chunk(2,function($user){ //每次查2條
var_dump($user);
if(.......) return false; //在滿足某個(gè)條件下使用return就不會(huì)再往下查了
});
# 使用聚合函數(shù)
// count()統(tǒng)計(jì)記錄條數(shù)
$nums=DB::table("user ")->count();
echo $nums;
// max()某個(gè)字段的最大值,同理min是最小值
$max=DB::table("user ")->max("age");
echo $max;
// avg()某個(gè)字段的平均值
$avg=DB::table("user ")->avg("age");
echo $avg;
// sum()某個(gè)字段的和
$sum=DB::table("user ")->sum("age");
echo $sum;
2.新增操作
$bool=DB::table("user")->insert(['name'=>'小明','sex'=>'女','age'=>20]);
echo $bool; //返回bool值
//如果想得到新增的id定铜,則使用insertGetId方法
$id=DB::table("user")->insertGetId(['name'=>'小明','sex'=>'女','age'=>20]);
echo $id;
//插入多條數(shù)據(jù)
$bool=DB::table("user")->insert([
['name'=>'小明','sex'=>'女','age'=>20],
['name'=>'小紅','sex'=>'男','age'=>21],
]);
echo $bool; //返回bool值
- 更新操作
$bool=DB::table("user")->where('ID',6)->update(['age'=>30]);
echo $bool;
//自增
$bool=DB::table("user")->where('ID',6)->increment("age");// 年齡加1
$bool=DB::table("user")->where('ID',6)->increment("age",3);// 年齡加3
echo $bool;
//自減
$bool=DB::table("user")->where('ID',6)->decrement("age");// 年齡減1
$bool=DB::table("user")->where('ID',6)->decrement("age",3);// 年齡減3
echo $bool;
//自增時(shí)再修改其他字段
$bool=DB::table("user")->where('ID',6)->increment("age",3,['name'=>'小強(qiáng)']);// 年齡加3 名字改為小強(qiáng)
- 刪除操作
$num=DB::table("user")->where('ID',6)->delete();// 刪除1條
$num=DB::table("user")->where('ID','>',4)->delete();// 刪除多條
echo $num; //刪除的行數(shù)
$num=DB::table("user")->truncate();// 刪除整表阳液,不能恢復(fù),謹(jǐn)慎使用
三揣炕、數(shù)據(jù)庫(kù)操作之 - Eloquent ORM
- 模型的建立及查詢數(shù)據(jù)
laravel所自帶的Eloquent ORM 是一個(gè)ActiveRecord實(shí)現(xiàn)帘皿,用于數(shù)據(jù)庫(kù)操作。每個(gè)數(shù)據(jù)表都有一個(gè)與之對(duì)應(yīng)的模型畸陡,用于數(shù)據(jù)表交互鹰溜。
建立模型,在app目錄下建立一個(gè)user模型丁恭,由于看習(xí)慣了mvc所以先建立一個(gè)Models文件夾在里面建立user.php曹动,目錄結(jié)構(gòu)變成 app/Models/user.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 指定表名
* @var string
*/
protected $table = 'e_user';
/**
* 指定id
* @var string
*/
protected $primarykey = 'id';
/*
* 自動(dòng)維護(hù)時(shí)間戳
* 返回當(dāng)前時(shí)間戳
*/
public $timestamps = true;
protected function getDateFormat(){
return time();
}
// 允許批量賦值的字段
protected $fillable=['name','age','sex'];
// 定義隱藏的字段
protected $hidden = ['updated_at','created_at','deleted_at'];
}
在User控制器里增加一個(gè)test方法
public function test(){
// all()方法查詢所有數(shù)據(jù)
$users=User ::all();
dd($users);
//find()查詢一條,依據(jù)主鍵查詢牲览。findOrFail()查找不存在的記錄時(shí)會(huì)拋出異常
$user=User ::find(5); //主鍵為5的記錄
var_dump($user);
//查詢構(gòu)造器的使用,省略了指定表名
$user=User::get();
var_dump($user);
//使用leftjoin 進(jìn)行查詢
Banner::where($where)
->leftJoin("c_img_url", function ($join){
// 右表和左表相對(duì)應(yīng)的字段墓陈,可以有多個(gè)右表,直接把這一句復(fù)制改一下表名字段名就行了
$join->on("c_img_url.id", "=", "c_banner.img_url_id");
})->get(array('c_banner.*','c_img_url.address','c_img_url.name'))
}
2.新增數(shù)據(jù)第献、自定義時(shí)間戳贡必、批量賦值
laravel會(huì)默認(rèn)維護(hù)created_at,updated_at 兩個(gè)字段,這兩個(gè)字段都是存儲(chǔ)時(shí)間戳庸毫,整型11位的仔拟,因此使用時(shí)需要在數(shù)據(jù)庫(kù)添加這兩個(gè)字段。如果不需要這個(gè)功能岔绸,只需要在模型里加一個(gè)屬性:public $timestamps=false; 以及一個(gè)方法理逊,可以將當(dāng)前時(shí)間戳存到數(shù)據(jù)庫(kù)
(1)使用save方法新增
$student=new Student();
//設(shè)定數(shù)據(jù)
$student->name='xiaoming';
$student->age='18';
$student->sex='女';
$bool=$student->save(); //保存
echo $bool;
(2)使用create方法新增時(shí)恋拷,需要在模型里增加:
//允許批量賦值的字段
protected $fillable=['name','age','sex'];
// 在控制器中使用
Student::create(['name'=>'mmm','age'=>23,'sex'=>'女']);
// 這樣即可新增成功制轰!
(3)firstOrCreate()以屬性查找記錄,若沒(méi)有則新增
代碼執(zhí)行順序:先查找表中是否有name=phphub-monkey的吱七,如果有則不新增刚盈,沒(méi)有就新增
第一個(gè)參數(shù)用于確認(rèn) Eloquent 對(duì)象是否存在羡洛;
第二個(gè)參數(shù)用于生成 Eloquent 對(duì)象時(shí)需要附加生成的屬性。
$user = User::firstOrCreate(
['name' => 'phphub-monkey'],
[
'email' => 'jin114001251@gmail.com',
'age' => '23',
'sex' => 'nv',
]
]);
(4)firstOrNew()以屬性查找記錄,若沒(méi)有則會(huì)創(chuàng)建新的實(shí)例欲侮。若需要保存崭闲,則自己調(diào)用save方法()
和firstOrCreate類似只不過(guò)需要自己調(diào)用save()
$user=User::firstOrNew(['name'=>'小強(qiáng)']);
$user->save();
echo $user;
- 修改數(shù)據(jù)
//通過(guò)模型更新數(shù)據(jù)
$user=User::find(2); // 修改主鍵為2的數(shù)據(jù)
$user->age=25;
$user->save(); //返回bool值
//通過(guò)查詢構(gòu)造器更新
$num=User::where('ID','>',2)->update(['age'=>20]);
echo $num; //返回更新的行數(shù)
updateOrCreate如果不存在就創(chuàng)建(和firstOrNew方法類似)
// 名字為小明的行是否存在,不存在就創(chuàng)建
User::updateOrCreate(
['name' => '小明'],
[
'age' => 20,
'sex' => '女',
]);
- 刪除數(shù)據(jù)
(1) 通過(guò)模型刪除數(shù)據(jù)
$user=User::find(11);
$user->delete(); //返回bool值
(2) 通過(guò)主鍵刪除
$num=User::destroy(10); //刪除主鍵為10的一條記錄
echo $num; //返回刪除的行數(shù)
$num=User::destroy(10,5); //刪除多條 或者$num=Student::destroy([10,5]);
echo $num; //返回刪除的行數(shù)