zoukankan      html  css  js  c++  java
  • laravel记录笔记Laravel 连接数据库、操作数据库的三种方式

     laravel中提供DB facade(原始查找)、查询构造器、Eloquent ORM三种操作数据库方式
    
        1、连接数据库
            .env    数据库配置
            DB_HOST=localhost          dbhost
            DB_DATABASE=laravel        dbname
            DB_USERNAME=root           username
            DB_PASSWORD=root           password
    
        2、使用DB facade实现CURD
            (1) 新建路由
                Route::get('city', 'cityController@index');
    
            (2) 新建控制器,直接在控制器里面查询
                namespace AppHttpControllers;
                use IlluminateSupportFacadesDB;
                class CityController extends Controller {
                    public function index() {
                        $insert = DB::insert('insert into city set name="安徽",state="init"');
                        增:返回bool
    
                        $delete = DB::delete('delete from city where id > 5');
                        删:返回删除的行数
    
                        $update = DB::update('update city set name = "上海" where id = 8');
                        改:返回更新的行数
    
                        $city   = DB::select('select * from city');
                        查:返回数组
                    }
                }
    
        3、使用查询构造器实现CURD
            (1)增:
                    $insert_bool = DB::table('city')->insert(['name' => '湖南', 'state' => 'init']);
                    插入一条数据返回bool值
    
                    $insert_id = DB::table('city')->insertGetId(['name' => '湖北', 'state' => 'init']);
                    插入一条数据返回插入的记录id
    
                    $insert_bool = DB::table('city')->insert([['name' => '北京', 'state' => 'init'], ['name' => '上海', 'state' => 'init']]);
                    插入多条数据返回bool值
    
            (2)删:
                    $delete_row = DB::table('city')->where('id', 14)->delete();
                    删除一条记录,返回受影响的行数,1行
    
                    $delete_table = DB::table('city')->truncate();
                    清空一张表,不返回任何标示
    
            (3)改:
                    $update_row = DB::table('city')->where('id', 20)->update(['name' => '日本']);
                    更新一条数据返回受影响的行数,1行
    
                    $update_row = DB::table('carousel')->increment('order_number');
                    让所有记录的order_number都自增1,返回受影响的行数,6行
    
                    $update_row = DB::table('carousel')->decrement('order_number');
                    让所有记录的order_number都自减1,返回受影响的行数,6行
    
                    $update_row = DB::table('carousel')->increment('order_number', 100);
                    让所有记录的order_number都自增100,返回受影响的行数,6行
    
                    $update_row = DB::table('carousel')->decrement('order_number', 100);
                    让所有记录的order_number都自减100,返回受影响的行数,6行
    
                    $update_row = DB::table('carousel')->where('id', 1)->increment('order_number', 200);
                    修改一条记录id为1的order_number字段自增200,返回受影响的行数,1行
    
                    $update_row = DB::table('carousel')->where('id', 1)->increment('order_number', 200, ['name' => '自增同时修改字段']);
                    修改一条记录id为1的order_number字段自增200,同时去修改其他字段,返回受影响的行数,1行
    
            (4)查:
                    $select_rows = DB::table('city')->get();
                    get方法查询所有记录
    
                    $first_row = DB::table('carousel')->orderBy('id', 'asc')->first();
                    first方法查询排序后的第一条
    
                    $select_rows = DB::table('carousel')->where('id', '>=', 2)->get();
                    where方法查询符合单个条件的所有记录
    
                    $select_rows = DB::table('carousel')->whereRaw('id >= ? and order_number > ?', [1, 5])->get();
                    whereRaw方法查询符合多个条件的所有记录
    
                    $select_field = DB::table('carousel')->pluck('name');
                    pluck方法查询符合条件的每条记录的name字段
    
                    $select_field = DB::table('carousel')->lists('name');
                    $select_field = DB::table('carousel')->lists('name', 'id_code');
                    lists方法查询符合条件的每条记录的name字段(或者查询符合条件的每条记录的name字段以id_code为键名)
    
                    $select_field = DB::table('carousel')->select('id','id_code','name')->get();
                    select方法查询符合条件的每条记录的指定字段
    
                    DB::table('user_log')->chunk(10, function($number){
                        var_dump($number);
                        if(???) return false;
                    });
                    chunk方法根据条件每次查询固定的记录,同时内部的回调函数可以控制流程,当满足某个条件的时候可以return false
    
                    dd($select_field);
    
            (5)聚合函数:
                    $count = DB::table('city')->count();
                    统计总的记录数
    
                    $max = DB::table('user_log')->max('id');
                    求最大值
    
                    $min = DB::table('user_log')->min('id');
                    求最小值
    
                    $avg = DB::table('user_log')->avg('id');
                    求平均值
    
                    $sum = DB::table('user_log')->sum('user_id');
                    求和
    
                    dd($sum);
    
        4、使用Eloquent ORM实现CURD
            介绍:laravel所自带的Eloquent ORM是一个优美、简洁的ActiveRecord实现,用来实现数据库操作,每个数据表都有一个与之对应的模型model,用于和数据表交互
    
            1) 简介、模型的建立及查询数据:
                路由:
                    Route::any('orm1', ['uses' => 'CityController@orm1']);
    
                控制器:
                    namespace AppHttpControllers;
                    use AppCity;
                    class CityController extends Controller
                    {
                        public function orm1()
                        {
                            (1)all方法查询所有的记录
                                $city = City::all();
    
                            (2)find方法根据主键id查询单条记录
                                $city = City::find(1);
    
                            (3)findOrFail方法根据主键id查询单条记录,如果查询失败则报异常
                                $city = City::findOrFail(1);
    
                            (4)get方法查询所有记录
                                $city = City::get();
    
                            (5)first方法查询第一条记录
                                $city = City::where('id', '>', 1)->orderBy('id', 'desc')->first();
    
                            (6)chunk方法每次查询固定条数记录出来
                                City::chunk(1, function ($number) {
                                    var_dump($number);
                                });
    
                            (7)count()方法求记录总条数
                                $count = City::count();
    
                            (8)max()方法求最大值
                                $max = City::where('id', '>', 1)->max('parent_id');;
                        }
                    }
    
                模型:
                    namespace App;
                    use IlluminateDatabaseEloquentModel;
                    class City extends Model
                    {
                        protected $table = 'city';      //  指定表名 与 模型关联起来
                        protected $primaryKey = 'id';   //  指定主键,默认是id可以不写
                    }
    
            2) 新增数据,自定义时间戳和批量赋值的使用:
                路由:
                    Route::any('orm1', ['uses' => 'CityController@orm1']);
    
                控制器:
                    namespace AppHttpControllers;
                    use AppCity;
    
                    class CityController extends Controller
                    {
    
                        public function orm1()
                        {
                            //  新增数据,保存数据
                            $city = new City();
                            $city->name = '123456';
                            $city->state = 'init';
                            $bool = $city->save();
                            dd($bool);
    
                            //  使用模型的create方法新增数据
                            $city = City::create(['name' => '南通', 'state' => 'init']);
                            dd($city);
    
                            //  以属性去查询数据,如果没有的话就去创建
                            $city = City::firstOrCreate(['name' => '南通']);
    
                            //  以属性去查询数据,如果没有的话就去创建,但是需要使用save保存下来
                            $city = City::firstOrNew(['name' => '南通ssss']);
                            $city->save();
                            dd($city);
                        }
                    }
    
                模型:
                    namespace App;
                    use IlluminateDatabaseEloquentModel;
    
                    class City extends Model
                    {
                        protected $table        = 'city';      //  指定表名 与 模型关联起来
                        protected $primaryKey   = 'id';        //  指定主键,默认是id可以不写
                        public    $timestamps   = false;       //  关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)
    
                        protected function getDateFormat()     //  此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式
                        {
                            return time();
                        }
    
                        protected function asDateTime($value)  //  取出来的时间不要格式化
                        {
                            return $value;
                        }
                    }
    
            3) 使用Eloquent ORM修改数据:
                路由:
                    Route::any('orm1', ['uses' => 'CityController@orm1']);
    
                控制器:
                    namespace AppHttpControllers;
                    use AppCity;
    
                    class CityController extends Controller
                    {
                        public function orm1()
                        {
                            //通过模型更新数据
                            $city = City::find(9);
                            $city->name = '苏州';
                            $bool = $city->save();
                            var_dump($bool);
    
                            //批量更新数据,返回更新后的条数
                            $update_rows = City::where('id', '>', 2)->update(['parent_id' => 10]);
                            var_dump($update_rows);
                        }
                    }
    
                模型:
                    namespace App;
                    use IlluminateDatabaseEloquentModel;
    
                    class City extends Model
                    {
                        protected $table        = 'city';      //  指定表名 与 模型关联起来
                        protected $primaryKey   = 'id';        //  指定主键,默认是id可以不写
                        public    $timestamps   = false;       //  关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)
    
                        protected function getDateFormat()     //  此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式
                        {
                            return time();
                        }
    
                        protected function asDateTime($value)  //  取出来的时间不要格式化
                        {
                            return $value;
                        }
                    }
    
            4) 使用Eloquent ORM删除数据:
                路由:
                    Route::any('orm1', ['uses' => 'CityController@orm1']);
    
                控制器:
                    namespace AppHttpControllers;
                    use AppCity;
    
                    class CityController extends Controller
                    {
                        public function orm1()
                        {
                            //通过模型删除
                            $city = City::find(9);
                            $bool = $city->delete();
                            var_dump($bool);
    
                            //通过主键删除,返回删除的条数
                            $delete_rows = City::destroy(8);
                            $delete_rows = City::destroy(6, 7);
                            $delete_rows = City::destroy([6, 7]);
                            var_dump($delete_rows);
    
                            //通过指定条件删除,返回删除的条数
                            $delete_rows = City::where('id', '>', 2)->delete();
                            var_dump($delete_rows);
                        }
                    }
    
                模型:
                    namespace App;
                    use IlluminateDatabaseEloquentModel;
    
                    class City extends Model
                    {
                        protected $table        = 'city';      //  指定表名 与 模型关联起来
                        protected $primaryKey   = 'id';        //  指定主键,默认是id可以不写
                        public    $timestamps   = false;       //  关闭自动维护时间戳(如果改成true,那么需要手动事先添加created_at、updated_at两个字段,此时的时间是datetime格式)
    
                        protected function getDateFormat()     //  此方法可以将created_at、updated_at两个字段的datetime类型改成时间戳的格式
                        {
                            return time();
                        }
    
                        protected function asDateTime($value)  //  取出来的时间不要格式化
                        {
                            return $value;
                        }
                    }
    
            5) 多数据库连接:
                .env文件配置如下:
                    DB_HOST=127.0.0.1
                    DB_DATABASE=dearedu
                    DB_USERNAME=root
                    DB_PASSWORD=root
    
                    DB_HOST_DEAREDU_MY=127.0.0.1
                    DB_PORT_DEAREDU_MY=3306
                    DB_DATABASE_DEAREDU_MY=dearedu_my
                    DB_USERNAME_DEAREDU_MY=root
                    DB_PASSWORD_DEAREDU_MY=root
    
                configdatabase.php文件配置如下:
                    'mysql' => [
                        'driver'    => 'mysql',
                        'host'      => env('DB_HOST', 'forge'),
                        'database'  => env('DB_DATABASE', 'forge'),
                        'username'  => env('DB_USERNAME', 'forge'),
                        'password'  => env('DB_PASSWORD', 'forge'),
                        'charset'   => 'utf8',
                        'collation' => 'utf8_unicode_ci',
                        'prefix'    => '',
                        'strict'    => false,
                    ],
    
                    'mysql_dearedu_my' => [
                        'driver' => 'mysql',
                        'host' => env('DB_HOST_DEAREDU_MY', 'forge'),
                        'port' => env('DB_PORT_DEAREDU_MY', '3306'),
                        'database' => env('DB_DATABASE_DEAREDU_MY', 'forge'),
                        'username' => env('DB_USERNAME_DEAREDU_MY', 'forge'),
                        'password' => env('DB_PASSWORD_DEAREDU_MY', 'forge'),
                        'charset' => 'utf8',
                        'collation' => 'utf8_unicode_ci',
                        'prefix' => '',
                        'strict' => false,
                        'engine' => null,
                    ],
    
                appHttpControllersMemberController.php文件配置如下:
                    namespace AppHttpControllers;
                    use AppMember;
                    class MemberController extends Controller
                    {
                        public function index()
                        {
                            $members = Member::getMember();
                        }
                    }
    
                appMember.php文件配置如下:
                    namespace App;
                    use IlluminateDatabaseEloquentModel;
                    use IlluminateSupportFacadesDB;
                    class Member extends Model
                    {
                        public static function getMember()
                        {
                            return DB::select("select mid from cms_member");
                        }
                    }
    
                appHttpControllersIndexController.php文件配置如下:
                    namespace AppHttpControllers;
                    use AppUnit;
    
                    class IndexController extends Controller
                    {
                        public function index()
                        {
                            $units = Unit::getUnit();
                        }
                    }
    
                appUnit.php文件配置如下:
                    namespace App;
                    use IlluminateDatabaseEloquentModel;
                    use IlluminateSupportFacadesDB;
                    class Unit extends Model
                    {
                        public static function getUnit()
                        {
                            return DB::connection('mysql_dearedu_my')->select("select id from my_config_unit limit 5");
                        }
                    }
  • 相关阅读:
    云虚拟化
    yum puppet 并整合控制台
    Centos6.4 openNebula
    ubuntu Server LAmp环境
    openSuSE12.1 zypper LAMP
    yum puppet
    NYOJ 257 郁闷的C小加(一)
    JAVA_SE基础——17.方法的重载
    poj 1390 Blocks (经典区间dp 方块消除)
    HBase数据同步到ElasticSearch的方案
  • 原文地址:https://www.cnblogs.com/yszr/p/9662914.html
Copyright © 2011-2022 走看看