laravel基础--6.3 Eloquent ORM

定义模型

 

默认规则是小写的模型类名复数格式作为与其对应的表名(除非在模型类中明确指定了其它名称)。所以,在本例中,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);
    }

 

发布了76 篇原创文章 · 获赞 5 · 访问量 9233
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章