定义模型
默认规则是小写的模型类名复数格式作为与其对应的表名(除非在模型类中明确指定了其它名称)。所以,在本例中,Eloquent 认为 Student模型存储记录在 students 表中。可以在模型中定义 table 属性来指定自定义的表名:
Eloquent 默认每张表的主键名为 id,可以在模型类中定义一个 $primaryKey 属性来覆盖该约定。
Student.php Models
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Student extends Model{
/**
* 关联到模型的数据表
*
* @var string
*/
protected $table = 'student';
/**
* 定义主键
*
* @var string
*/
protected $primaryKey = 'id';
/**
* 表明模型是否应该被打上时间戳
*
* @var bool
*/
public $timestamps = true;
/**
* 模型日期列的存储格式
* $dateFormat 属性。该属性决定日期被如何存储到数据库中,以及模型被序列化为数组或 JSON 时日期的格式
* $dateFormat 可以接受的值和 php 中 date () 函数第一个参数可以接受的值一样。
* U 的意思就是我们平常说的时间戳 (10 位到秒)
* Y m d H i s 都可用
* @var string
*/
// protected $dateFormat = 'm';
//
/*
* 如果同时定义了$dateFormat getDateFormat, 数据表的时间类型 以getDateFormat 的返回值为准。
*/
protected function getDateFormat(){
// return date("Ymd",time());
return time();
}
/*
*
* 不写此函数,echo 时间戳自动转为2019-08-01 15:03:03 格式
* echo $student->created_at;
*
*/
protected function asDateTime($value)
{
return $value;
}
// 自定义用于存储时间戳的字段名称,可以在模型中设置 CREATED_AT 和 UPDATED_AT 常量:
// const CREATED_AT = 'creation_date';
// const UPDATED_AT = 'last_update';
//二者互斥,只能定义一个 $fillable $guarded
/**
* 可以被批量赋值的属性.
* 白名单
* @var array
*/
// protected $fillable = ['name'];
/**
* 不能被批量赋值的属性
* 黑名单
* @var array
*/
// protected $guarded = ['price'];
protected $guarded = [];//所有属性都可赋值
}
StudentController
public function orm1(){
echo "<pre>";
// all 方法返回模型表的所有结果
// $student_list = Student::all();
// var_dump($student_list);
// $student_list = Student::where('age','>',18)
//
// ->orderBy('age','desc')
// ->take(2)
// ->get();
// var_dump($student_list);
// 组块结果集
//
// 如果你需要处理数据量很大的 Eloquent 结果集,可以使用 chunk 方法。chunk 方法会获取一个指定数量的 Eloquent 模型“组块”,并将其填充到给定闭包进行处理。使用 chunk 方法在处理大量数据集合时能够有效减少内存消耗:
// Student::chunk(2, function ($flights) {
// foreach ($flights as $flight) {
// //
// if($flight->age > 15){
// var_dump($flight->age);
// return false;
// }
//
// }
// });
// 使用 find 和 first 获取单个记录。这些方法返回单个模型实例而不是模型集合:
// 通过主键获取模型...
// $flight = Student::find(1);
//
// // 获取匹配查询条件的第一个模型...
// $flight = Student::where('age', 1)->first();
//
// //还可以通过传递主键数组来调用 find 方法,这将会返回匹配记录集合:
//
// $flights = Student::find([1, 2, 3]);
//
//
// //count、sum、max,以及其它查询构建器提供的聚合函数。这些方法返回计算后的结果而不是整个模型实例:
//
// $count = Student::where('age', 1)->count();
// $max = Student::where('age', 1)->max('price');
//新增
//使用模型新增数据
// $student = new Student();
// $student->name = rand(1,999);
// $student->age = rand(1,99);
//
// $num = $student->save();
// var_dump($num);
// $student = Student::find(1022);
// echo $student->created_at;
// dd($student);
//使用模型create方法
$student = Student::create(['name'=>'ffds','age'=>14]);
var_dump($student);
其它创建方法
// firstOrCreate 和 firstOrNew。firstOrCreate 方法先尝试通过给定列/值对在数据库中
查找记录,
// 如果没有找到的话则通过给定属性创建一个新的记录。
//
//firstOrNew 方法和 firstOrCreate 方法一样先尝试在数据库中查找匹配的记录,如果没有找到,
// 则返回一个新的模型实例。需要注意的是,通过 firstOrNew 方法返回的模型实例并没有持久化
到数据库中,
// 你还需要调用 save 方法手动持久化
// firstOrNew不会自动谢新纪录,
// $student = Student::firstOrCreate(['name'=>'888']);
// echo $student->name;
// $student = Student::firstOrNew(['name'=>'987']);
// $student->save();
// echo $student->name;
// 更新
//
// save 方法还可以用于更新数据库中已存在的模型。要更新一个模型,应该先获取它,设置你想要更新的属性,
//然后调用 save 方法。同样,updated_at 时间戳会被自动更新,所以没必要手动设置其值:
//
// $student = Student::find(1003);
// // dd($student);
// $student->name = 'Ne44w';
// $student->save();
//
// 批量更新
//
// 更新操作还可以同时修改给定查询提供的多个模型实例,在本例中,所有有效且 destination=San Diego
// 的航班都被标记为延迟:
//返回 更新条数
// $num = Student::where('age', '>', 18)
// ->where('id', '>',1010)
// ->update(['sex' => 1]);
//var_dump($num);
// update 方法要求以数组形式传递键值对参数,代表着数据表中应该被更新的列。
// 如果模型已存在则更新,否则创建新模型的场景,Laravel 提供了一个 updateOrCreate 方法
来一步完成。
//和 firstOrCreate 方法一样,updateOrCreate 方法会持久化模型,所以无需调用 save():
//如果存在name== 'New' 的记录,这更新age字段 为99
//如果不存在,折现建一条记录 name=>New age=>99
// $student = Student::updateOrCreate(
// ['name' => 'New'],['age' => 99]
// );
// dd($student);
// 删除模型
//
// 要删除一个模型,调用模型实例上的 delete 方法:
// $student = Student::find(1027);
// $student->delete();
// 通过主键删除模型
//
// 在上面的例子中,我们在调用 delete 方法之前从数据库中获取该模型,不过,如果你知道模型的主键的话,
//可以调用 destroy 方法直接删除而不需要获取它:
// Student::destroy(1026);
// Student::destroy([1024,1025]);
// Student::destroy(1023,1022);
// 通过查询删除模型
//
// 当然,你还可以通过查询删除多个模型,在本例中,我们删除所有被标记为无效的航班:
//返回影响 行数
// $deletedRows = Student::where('id','>', 1008)->delete();
//var_dump($deletedRows);
// 软删除 使用步骤:
//
// 1、在表中增加字段deleted_at,用代码添加:
// Schema::table('flights', function ($table) { $table->softDeletes(); });
// 2、在Model中使用trait SoftDeletes
// 3、在Model中添加deleted_at到$dates成员变量
//1、在每个文件里运行下面代码 添加字段 重复运行会报错
// Schema::table('student', function ($table) {
// $table->softDeletes();
// });
// $student_list = Student::all();
//dd($student_list);
// $student->delete();
// var_dump($num);
}