Laravel5.2学习笔记---数据库操作之Eloquent ORM

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值