Laravel学习笔记—数据库操作的三种方式

新建模型

在上篇文章[Laraver学习笔记—框架基本介绍][1]中有介绍模型是在app目录下,假设在app目录新建User.php为用户模型,下文将以user模型为例介绍在laravel中数据库操作多种方式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

namespace App;

use Illuminate\Database\Eloquent\Model;



class User extends Model

{

	// 指定表名

	protected $table = 'User';

	

	// 指定主键

	protected $primaryKey = 'id';



	// 允许批量赋值的字段

	protected $fillable = ['name', 'age'];



	// 指定不允许批量赋值的字段

	protected $guarded = ['name', 'age'];



	// 自动维护时间戳

	public $timestamps = TRUE;



	// 关闭自动维护时间戳

	public $timestamps = TRUE;



	// 维护时间保存为时间戳

	protected function getDateFormat() {

		return time();

	}



	// 取出时间记录返回时间戳

	protected function asDateTime($time) {

		return $time;

	}

}

引入模型

在控制器中使用use App\user引入;

DB facade(原始查找)

原始SQL CURD实例###

增加

1
2
3
4

// 返回布尔值

DB::insert('insert into user(name,sex,age)values(?,?,?)', ['liu', 1, 17]);

更新

1
2
3
4

// 返回更新行数

$boolUpt = DB::update('update user set name = ? where age = ?', ['immocv', 18]);

查询

1
2
3
4

// 返回数据对象

DB::select('select * from user where age >= 19');

删除

1
2
3
4

// 返回删除行数

DB::delete('delete from user where id >= ?', [3]);

查询构造器

简介

  1. 提供方便、流畅的接口,用来建立及执行数据库查找语法

  2. 使用PDO参数绑定,以保护应用程序免于SQL注入,因此传入的参数不需要额外的特殊字符转义

  3. 基本可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行

构造器CURD实例

增加

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

// 返回布尔值

DB::table('user')->insert(['name' => 'chen', 'age' => 24, 'sex' => 1]);

// 返回插入主键值

DB::table('user')->insertGetId(['name' => 'chen2', 'age' => 25, 'sex' => 1]);



/**

 * 批量插入数据

 * 批量插入数据前 在对应模型中指定可批量插入的字段

 * protected $fillable = ['name', 'age']; //指定允许批量赋值的字段

 * protected $guarded = ['name', 'age']; //指定不允许批量赋值的字段

 * 返回插入行数

 */

DB::table('user')->insert(

	['name' => 'chen3', 'age' => 26, 'sex' => 1],

	['name' => 'chen4', 'age' => 27, 'sex' => 1]

);

更新

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

// 根据条件更新数据

DB::table('user')

	->where('id','>',3)

	->update(['age' => 25]

);



// 自增

DB::table('user')->increment('age', 3);



// 自减

DB::table('user')->decrement('age', 3);



// 根据条件自增或自减

DB::table('user')

	->where('id', '>', 3)

	->decrement('age', 3);



// 根据条件自减字段并更新数据

DB::table('user')

	->where('id', '>', 3)

	->decrement('age', 3, ['name' => 'chen']);

	}

查询

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

// get 获取表所有数据

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



// frist 获取结果集第一条数据

$users = DB::table('user')->orderBy('id','desc')->first();



// where 根据条件查询数据

$users = DB::table('user')

	->where('id', '>=', '5')

	->get();



// whereRaw 根据多条件查询数据

$users = DB::table('user')

	->whereRaw('id <= ? and name = ?', [6, 'chen'])

	->get();



// pluck 多条件查找并显示某一字段

$users = DB::table('user')

	->whereRaw('id <= ? and name = ?', [6, 'chen'])

	->pluck('id');



// lists 第一个参数为查找的字段 第二个参数为key值

$users = DB::table('user')

	->whereRaw('id <= ? and name = ?', [6, 'chen'])

	->lists('name', 'id');



// 指定查找字段

$users = DB::table('user')

	->select('id', 'name')

	->get();

 	

// 	chunk 批量查找

DB::table('user')->chunk(2, function($user) {



});

删除

1
2
3
4
5
6
7
8

// 根据条件删除数据

$delnum = DB::table('student')->where('id', 8)->delete();

// 删除整表

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

聚合函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

// count 总记录数

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



// max 最大值

DB::table('user')->max('age');



// min 最小值

DB::table('user')->min('age');



// min 平均值

DB::table('user')->avg('age');



// sum 某一字段总和

DB::table('user')->sum('age');

Eloquent ORM

简介

  1. Eloquent ORM是laravel自带的一个优美、简洁的ActiveRecord的实现,用来实现数据库操作

  2. 每个数据表都有一个与之相对应的“模型(model)”,用于和数据表交互

  3. 使用ORM须在控制器中引用对应模型use App\User;

ORM CURD实例

增加

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

// 实例化插入

$objUser = new Student();

$objUser->name='test';

$objUser->age = 18;

// 调用save保存

$bool = $objUser->save();



// create 模型方法保存数据 返回模型实例

$user = Student::create(

	['name' => 'xiaochen', 'age' => 17]

);



// firstOrCreate 以属性查找并返回数据实例 若没有插入并返回实例

$user = Student::firstOrCreate(

	['name' => 'xiaochen2']

);



// firstOrNew 以属性查找用户 如没有则新建实例 若需要保存自己调用save

$user = Student::firstOrNew(

	['name' => 'xiaochen23']

); 

$user->save();

更新

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18

// 通过模型更新数据

$objuser = Student::find(14);

$objuser->name = 'kitty';

// 调用save保存

$objuser->save();



// 结合查询语句批量更新 返回更新行数

Student::where('id', '>', 13)

	->update(['age' => 21]);

查询

ORM中查询方法和上文构造器中查询基本类似,不过是把DB::table('user')替换成User

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

// all 查询表的所有记录

$users = User::all();



// find 根据主键查找数据

$user = User::find(1);



// findOrFail 根据主键查找 没有则报错

$user = User::findOrFail(10);



// get 根据条件查找数据

$users = User::where('id', '>=', 1)->orderBy('id', 'desc')->get();



// 批量取出数据

Student::chunk(2, function($user) {



});

删除

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

// 通过模型删除 

$user = Student::find(15);

$bool = $user->delete();



/**

 * destroy 通过主键删除

 * 参数可以为主键数组destroy([11, 12])

 * 多个参数destroy(11, 12)

 */

$num = Student::destroy([11,12]);



// 通过条件删除

$num = Student::where('id','>', 7)->delete([11,12]);