当前位置 主页 > 网站技术 > 代码类 >

    laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析

    栏目:代码类 时间:2019-12-20 12:06

    本文实例讲述了laravel框架数据库操作、查询构建器、Eloquent ORM操作。分享给大家供大家参考,具体如下:

    1、连接数据库

    laravel连接数据库的配置文件位于config/database.php中,在其中connection字段中包含laravel所支持的数据库的配置信息,可以看到其中有主机、端口、数据库、用户名、密码等信息:

    'mysql' => [
      'driver' => 'mysql',
      'host' => env('DB_HOST', 'localhost'),
      'port' => env('DB_PORT', '3306'),
      '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=数据库服务器地址
    DB_PORT=数据库端口
    DB_DATABASE=数据库名
    DB_USERNAME=用户名
    DB_PASSWORD=密码

    2、原生SQL操作数据库

    在controller中对数据库进行增删改查的操作

    public static function testDB(){
      //增加一条数据
      DB::insert("insert into student(name,age) values(?,?)",['sandy',19]);
      //删除一条数据
      DB::delete('delete from student where name=?',['sandy']);
      //修改一条数据
      DB::update('update student set sex=? where name=?',['男','tory']);
      //查询数据
      $res=DB::select('select * from student');
      //进行数据库通用操作
      DB::statement('drop table users');
      //打印结果
      dd($res);
    }
    
    

    其中通过?占位符的方式进行了参数绑定,以此来防止数据库注入攻击,也可以通过命名绑定的方式:   

    $res = DB::select('select * from users where id = :id', ['id' => 1]);
    
    

    3、通过查询构建器操作数据库

    Laravel将常用的数据库操作封装为接口函数提供给用户调用,从而使数据库操作更为便捷,这些接口就是查询构建器(query builder)。而且通过PDO绑定的方式避免SQL注入攻击,在使用查询构建器时不必考虑过滤用户输入。

    3.1、得到结果集

    lavarel查询的返回结果集合是StdClass,可以通过$res->name类似访问对象属性的方式访问返回值。如果要查询整个表使用get(),查询表中一条数据使用first(),查询一条数据的某个字段用value(),查询表中所有数据的某个字段用pluck()

    //get()返回表中所有数据
    $res=DB::table('student')->get();
    //first()返回结果集中的第一条数据
    $res=DB::table('student')->where('id','1001')->first();
    //value()返回一条数据中的指定字段
    $res=DB::table('student')->where('id','1003')->value('name');
    //pluck()返回结果集中name字段的所有值
    $res=DB::table('student')->pluck('name');
    
    

    当结果集中的数据过多时,可以通过分块的方式返回结果集,chunk函数第一个参数为分块的大小(以每块2个数据的方式返回结果集),第二个参数为回调函数,当其返回false时就停止结果集的返回:

    DB::table('student')->chunk(2,function ($res){
      foreach ($res as $user){
        var_dump($user);
        if ($user->id >=1003) return false;
      }
    });