新建模型
在上篇文章Laraver学习笔记—框架基本介绍中有介绍模型是在app
目录下,假设在app
目录新建User.php
为用户模型,下文将以user模型
为例介绍在laravel中数据库操作多种方式
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实例
增加
// 返回布尔值
DB::insert('insert into user(name,sex,age)values(?,?,?)', ['liu', 1, 17]);
更新
// 返回更新行数
$boolUpt = DB::update('update user set name = ? where age = ?', ['immocv', 18]);
查询
// 返回数据对象
DB::select('select * from user where age >= 19');
删除
// 返回删除行数
DB::delete('delete from user where id >= ?', [3]);
查询构造器
简介
提供方便、流畅的接口,用来建立及执行数据库查找语法
使用PDO参数绑定,以保护应用程序免于SQL注入,因此传入的参数不需要额外的特殊字符转义
基本可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行
构造器CURD实例
增加
// 返回布尔值
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]
);
更新
// 根据条件更新数据
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']);
}
查询
// 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) {
});
删除
// 根据条件删除数据
$delnum = DB::table('student')->where('id', 8)->delete();
// 删除整表
DB::table('student')->truncate();
聚合函数
// 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
简介
Eloquent ORM是laravel自带的一个优美、简洁的ActiveRecord的实现,用来实现数据库操作
每个数据表都有一个与之相对应的“模型(model)”,用于和数据表交互
使用
ORM
须在控制器中引用对应模型use App\User;
ORM CURD实例
增加
// 实例化插入
$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();
更新
// 通过模型更新数据
$objuser = Student::find(14);
$objuser->name = 'kitty';
// 调用save保存
$objuser->save();
// 结合查询语句批量更新 返回更新行数
Student::where('id', '>', 13)
->update(['age' => 21]);
查询
ORM
中查询方法和上文构造器中查询基本类似,不过是把DB::table('user')
替换成User
// 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) {
});
删除
// 通过模型删除
$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]);