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

新建模型

在上篇文章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]);

查询构造器

简介

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

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

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

构造器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

简介

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

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

  3. 使用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]);
添加新评论