ORM是使用laravel操作数据库最常用、最方便的方式。laravel所自带的Eloquent ORM是一个优美简洁的ActiveRecord实现,用来实现数据库操作。每个数据表都有一个与之相对应的“模型(Model)”用于和数据表交互
我这里有一个student表,然后在app下创建一个Student.php模型
Student.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
//目前模型还没有表进行关联
//默认情况下它是模型的复数对应着表
//手动指定关联的表
protected $table = 'student';//这样就关联成功了
//默认情况下是以id作为主键,如果不是 就按照下边这样进行指定
protected $primaryKey = 'id';
//然后到控制器中使用
}
StudentController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Student;//记得添加这个
class StudentController extends Controller{
public function orm1(){//记得添加路由
//all()查询表中所有记录
// $students = Student::all();
// dd($students);
//根据主键进行查询
// $student = Student::find(4);
//findOrFail()根据主键查找,如果没找到,抛出异常
// $student = Student::findOrFail(100);
//get()查询表中的所有记录
// $students = Student::get();
//first()查询第一条记录
// $students = Student::where('id', '>', 4)
// ->orderBy('age', 'desc')
// ->first();
//chunk() 如果我们有几十万条数据,我们直接使用get(),服务器肯定就爆了,使用chunk()我们就可以分段获取
// Student::chunk(2, function($students) {
// var_dump($students);
// });
//聚合函数
//$num = Student::count();//返回记录条数
$age = Student::where('id', '>', 2)->max('age');
//min()、avg()、sum()用法相同
var_dump($age);
//dd($students);
}
}
ORM中的新增、自定义时间戳及批量赋值
新增数据有两种方式
1,通过模型新增数据(涉及到自定义时间戳)
2,使用模型的Create方法新增数据(涉及到批量赋值)
StudentController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Student;//记得添加这个
class StudentController extends Controller{
public function orm2(){//记得添加路由
//使用模型新增数据
// $student = new Student();
// $student->name = 'shulv7';
// $student->age = 24;
// $bool = $student->save();//保存到数据库
// dd($bool);//这个时候我们会发现表中的新增时间和修改时间都是2018
//这是因为调用save方法时ORM会默认维护数据表的created_at和updated_at字段,这时候时间不需要我们手动去管理,如果不想用就可以在模型中进行关闭(见Student.php)
// $student = Student::find(8);
// echo $student->created_at;//这个时候,输出的时间已经被格式化好了。如果我们不想格式化,可以在模型中写一个asDateTime()方法
// //那么我们就可以自己对这个时间戳进行格式化
// echo date('Y-m-d H:i', $student->created_at);
//使用模型中的Create方法新增数据
// $student = Student::create(
// ['name'=>'shulv8', 'age'=>22]
// );//直接这样写会报错,不允许批量添加,这时需要修改模型
// dd($student);
//firstOrCreate()用属性查找用户,若没有,则新增,并取得新的实例
// $student = Student::firstOrCreate(
// ['name'=>'shulv8',]
// );
// $student = Student::firstOrCreate(
// ['name'=>'shulv10',]//这个不存在,它会新增
// );
//firstOrNew()以属性查找用户,若没有则新建新的实例,如果需要保存则调用save()
// $student = Student::firstOrNew(
// ['name'=>'shulv10',]//这个存在,它会查找
// );
$student = Student::firstOrCreate(
['name'=>'shulv11',]//这个不存在
);//如果直接这样,它是不会被保存到数据库的
$bool = $student->save();//保存到数据库
dd($bool);
}
}
Student.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
//目前模型还没有表进行关联
//默认情况下它是模型的复数对应着表
//手动指定关联的表
protected $table = 'student';//这样就关联成功了
//默认情况下是以id作为主键,如果不是 就按照下边这样进行指定
protected $primaryKey = 'id';
//这里指定允许批量赋值的字段
protected $fillable = ['name', 'age'];
//指定某个字段不允许批量赋值
protected $guarded = [];
//关闭自定义时间戳,修改为false 这个东西挺好用的,所以一般打开它
public $timestamps = true;
//设置时间为Unix时间戳形式
protected function getDateFormat(){
return time();
}
//不格式化时间戳函数
protected function asDateTime($val){
return $val;
}
}
使用ORM修改、删除数据
更新:
1,通过模型更新
2,结合查询语句批量更新
删除:
1,通过模型删除
2,通过主键值删除
3,根据指定条件删除
StudentController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Student;//记得添加这个
class StudentController extends Controller{
public function orm3(){//记得添加路由
//通过模型更新数据
// $student = Student::find(11);
// $student->name = 'kitty';
// $bool = $student->save();
// var_dump($bool);
//结合查询语句批量更新
// $num = Student::where('id', '>', 8)->update(
// ['age' => 60]
// );
// var_dump($num);//更新的行数
}
public function orm4(){//记得添加路由
//删除数据
//通过模型删除
// $student = Student::find(11);
// $bool = $student->delete();
// var_dump($bool);
//通过主键值删除
// $num = Student::destroy(10);
// var_dump($num);//删除条数 这里只删除了一条
//还可以写多个主键id
// $num = Student::destroy(8,9);
// var_dump($num);
//也可以这样$num = Student::destroy([8,9])
//通过指定条件删除
$num = Student::where('id', '>', 3)->delete();
var_dump($num);
}
}
Student.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
//目前模型还没有表进行关联
//默认情况下它是模型的复数对应着表
//手动指定关联的表
protected $table = 'student';//这样就关联成功了
//默认情况下是以id作为主键,如果不是 就按照下边这样进行指定
protected $primaryKey = 'id';
//这里指定允许批量赋值的字段
protected $fillable = ['name', 'age'];
//指定某个字段不允许批量赋值
protected $guarded = [];
//关闭自定义时间戳,修改为false 这个东西挺好用的,所以一般打开它
public $timestamps = true;
//设置时间为Unix时间戳形式
protected function getDateFormat(){
return time();
}
//不格式化时间戳函数
protected function asDateTime($val){
return $val;
}
}