Laravel基础篇学习笔记(二):数据库操作

使用到的数据库文件:Laravel基础篇学习笔记(二)SQL文件

1)DB facade(原始查找)

a)连接数据库;

配置数据库在目录 laravel/config/database.php
'default' => env('DB_CONNECTION', 'mysql'),

//默认配置为mysql,因此查看connections里对应的mysql项
'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
    'strict'    => false,
    'engine'    => null,
],

// 这里的env指的是 laravel/.env,配置内容为:
DB_HOST=127.0.0.1
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

b)使用DB facade实现CURD;

// 使用 DB 类操作数据库,必须调用 DB facade 类
use Illuminate\Support\Facades\DB;

// 新增
$bool = DB::insert('insert into student(name,age) values(?, ?)',
    ['imooc', 18]);
var_dump($bool);

// 更新
$num = DB::update('update student set age = ? where name = ?',
    [20, 'sean']);
var_dump($num);

// 查询
$students = DB::select('select * from student where id = ?',
    [1001]);
dd($students);

// 删除
$num = DB::delete('delete from student where id > ?',
    [1001]);
var_dump($num);

2)查询构造器

a)查询构造器简介及新增数据

// 新增一条数据,并获取其ID值
$id = DB::table('student')->insertGetId(
    ['name' => 'vision', 'age' => 18]
);
var_dump($id);

// 新增多条数据,返回布尔值表明执行成功或失败
$bool = DB::table('student')->insert([
    ['name' => 'name1', 'age' => 20],
    ['name' => 'name2', 'age' => 21],
]);
var_dump($bool);

b)使用查询构造器更新数据

// 查询构造器更新数据,返回修改的数量
$num = DB::table('student')
   ->where('id', 1002)
   ->update(['age' => 30]);

// 不加条件默认所有自增自减一,返回修改的数量
$num = DB::table('student')->increment('age');     //自增
$num = DB::table('student')->decrement('age');     //自减

// 加上条件自增自减,返回修改的数量
$num = DB::table('student')->increment('age', 3);
$num = DB::table('student')->decrement('age', 3);

// 把id为1002的age字段自减3,并把name字段改为iimooc,返回修改的数量
$num = DB::table('student')
   ->where('id', 1002)
   ->decrement('age', 3, ['name' => 'iimooc']);

c)使用查询构造器删除数据

// 删除ID为1007的数据,返回修改的数量
$num = DB::table('student')
    ->where('id', 1007)
    ->delete();

// 删除ID大于等于1005的数据,返回修改的数量
$num = DB::table('student')
    ->where('id', '>=', 1005)
    ->delete();

// 清空表数据,无返回数据
DB::table('student')->truncate();

d)使用查询构造器查询数据

get() 获取所有数据

$students = DB::table('student')->get();

first() 获取第一条数据

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

where() 添加查询条件

$students = DB::table('student')
    ->where('id', '>=', 1002)
    ->get();

whereRaw() 多个查询条件

$students = DB::table('student')
    ->whereRaw('id >= ? and age > ?', [1001, 18])
    ->get();

pluck() 结果集中指定的字段

$names = DB::table('student')
    ->pluck('name');

lists() 结果集中指定的字段

$names = DB::table('student')
    ->lists('name');
// 查询结果如下
array:5 [▼
  0 => "name1"
  1 => "name2"
  2 => "name3"
  3 => "name4"
  4 => "name5"
]

// 指定ID作为下标
$names = DB::table('student')
    ->lists('name', 'id');
// 查询结果如下
array:5 [▼
  1001 => "name1"
  1002 => "name2"
  1003 => "name3"
  1004 => "name4"
  1005 => "name5"
]

select() 选择指定字段进行查询

$students = DB::table('student')
    ->select('id', 'name', 'age')
    ->get();

chunk() 每次查询两条数据,直到结束

echo "<pre>";
DB::table('student')->chunk(2, function($students) {

    var_dump($students);

    // if(你的条件) {
    //     return false; // 在特定条件下执行可以使查询停止
    // }

});

e)查询构造器中的聚合函数

// 统计表的记录数
$num = DB::table('student')->count();

// 计算最大值
$max = DB::table('student')->max('age');

// 计算最小值
$min = DB::table('student')->min('age');

// 计算平均数
$avg = DB::table('student')->avg('age');

// 计算和
$sum = DB::table('student')->sum('age');

3)Eloquent ORM

a)Eloquent ORM简介、模型的建立及查询数据

建立模型文件 laravel/app/Student.php

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model
{
    // 指定表名
    protected $table = 'student';
    // 指定id
    protected $primaryKey = 'id';
}

控制器路径 laravel/app/Http/Controllers/StudentController.php

// 记住需要调用该模型
use App\Student;



// all() 查询表里所有数据
$students = Student::all();

// find() 查询指定ID
$students = Student::find(1001);

// findOrFail()     findOrFail() 失败会报错,find() 会返回null
$students = Student::findOrFail(1006);



// 使用查询构造器的方法也可查询数据
$students = Student::get();
$students = Student::where('id', '>', '1001')
    ->orderBy('age', 'desc')
    ->first();
echo "<pre>";
Student::chunk(2, function($students) {
    var_dump($students);
});

// 聚合函数
$num = Student::count();
$max = Student::where('id', '>', 1001)->max('age');
var_dump($max);

b)Eloquent ORM中新增数据、自定义时间戳及批量赋值的使用

控制器路径 laravel/app/Http/Controllers/StudentController.php
有部分功能需要在模型文件开启才能够使用

// 1. 使用模型新增数据
$student = new Student();
$student->name = 'sean2';
$student->age = 20;
$bool = $student->save();


// 2. 使用模型查找指定字段(参照模型文件设置2)
$student = Student::find(1015);
echo $student->created_at . "<br />";
echo date('Y:m:d H:i:s', $student->created_at);


// 3. 使用模型的Create方法新增数据(参照模型文件设置3)
$student = Student::create(
    ['id' => '1', 'name' => 'imddooc', 'age' => 18, 'sex' => '5']
);
//此处因没有设置id,sex字段,插入数据不会赋值
dd($student);


// 4. firstOrCreate() 有匹配的,就不添加,没有则添加数据
$student = Student::firstOrCreate(
    ['name' => '555']
);


// 5. firstOrNew()   以属性查找用户,如果没有则建立新的实例,需要保存自己调用save
$student = Student::firstOrNew(
    ['name' => '5555']
);
$bool = $student->save();

模型文件 laravel/app/Student.php

// 2. 设置自动维护时间戳,会帮我们把字段created_at和updated_at的时间添加进去;
// 默认开启,设置成false则关闭
public $timestamps = true;

// 设置created_at和updated_at的时间形式,默认为当前年份,如“2017”;设置getdateFormat可实现显示时间戳
protected function getdateFormat()
{
    return time();
}

// 默认输出created_at和updated_at时,会自动格式化时间;设置asDateTime可以实现直接输出
protected function asDateTime($val)
{
    return $val;
}


// 3. 指定允许批量赋值的字段,只有这样才能让create方法成功,没有设置则按默认的来
protected $fillable = ['name', 'age'];

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

c)使用Eloquent ORM修改数据

// 通过模型更新数据
$student = Student::find(1021);
$student->name = 'kitty';
$bool = $student->save();       // 会修改name和updated_at字段
var_dump($bool);


// 结合查询语句批量更新
$num = Student::where('id', '>', 1020)->update(
    ['age' => 41]
);
var_dump($num);

d)使用Eloquent ORM删除数据

// 通过模型删除;删除时如果没有该数据会报错
$student = Student::find(1021);
$bool = $student->delete();
var_dump($student);


// 通过主键删除;删除时没有该数据返回int(0)
$num = Student::destroy(1022);
$num = Student::destroy(1024,1025);
$num = Student::destroy([1019,1020]);
var_dump($num);


// 删除指定条件的数据
$num = Student::where('id', '>', 1015)->delete();
var_dump($num);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值