使用到的数据库文件:Laravel基础篇学习笔记(二)SQL文件
配置数据库在目录 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
// 使用 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);
// 新增一条数据,并获取其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);
// 查询构造器更新数据,返回修改的数量
$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']);
// 删除ID为1007的数据,返回修改的数量
$num = DB::table('student')
->where('id', 1007)
->delete();
// 删除ID大于等于1005的数据,返回修改的数量
$num = DB::table('student')
->where('id', '>=', 1005)
->delete();
// 清空表数据,无返回数据
DB::table('student')->truncate();
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 ""
;
DB::table('student')->chunk(2, function($students) {
var_dump($students);
// if(你的条件) {
// return false; // 在特定条件下执行可以使查询停止
// }
});
// 统计表的记录数
$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');
建立模型文件 laravel/app/Student.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 ""
;
Student::chunk(2, function($students) {
var_dump($students);
});
// 聚合函数
$num = Student::count();
$max = Student::where('id', '>', 1001)->max('age');
var_dump($max);
控制器路径 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 . "
";
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 = [];
// 通过模型更新数据
$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);
// 通过模型删除;删除时如果没有该数据会报错
$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);