Laravel 连接数据库、操作数据库的三种方式

来源:互联网 发布:ubuntu 在线音乐 编辑:程序博客网 时间:2024/05/22 22:57
 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 App\Http\Controllers;            use Illuminate\Support\Facades\DB;            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 App\Http\Controllers;                use App\City;                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 Illuminate\Database\Eloquent\Model;                class City extends Model                {                    protected $table = 'city';      //  指定表名 与 模型关联起来                    protected $primaryKey = 'id';   //  指定主键,默认是id可以不写                }        2) 新增数据,自定义时间戳和批量赋值的使用:            路由:                Route::any('orm1', ['uses' => 'CityController@orm1']);            控制器:                namespace App\Http\Controllers;                use App\City;                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 Illuminate\Database\Eloquent\Model;                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 App\Http\Controllers;                use App\City;                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 Illuminate\Database\Eloquent\Model;                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 App\Http\Controllers;                use App\City;                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 Illuminate\Database\Eloquent\Model;                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            config\database.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,                ],            app\Http\Controllers\MemberController.php文件配置如下:                namespace App\Http\Controllers;                use App\Member;                class MemberController extends Controller                {                    public function index()                    {                        $members = Member::getMember();                    }                }            app\Member.php文件配置如下:                namespace App;                use Illuminate\Database\Eloquent\Model;                use Illuminate\Support\Facades\DB;                class Member extends Model                {                    public static function getMember()                    {                        return DB::select("select mid from cms_member");                    }                }            app\Http\Controllers\IndexController.php文件配置如下:                namespace App\Http\Controllers;                use App\Unit;                class IndexController extends Controller                {                    public function index()                    {                        $units = Unit::getUnit();                    }                }            app\Unit.php文件配置如下:                namespace App;                use Illuminate\Database\Eloquent\Model;                use Illuminate\Support\Facades\DB;                class Unit extends Model                {                    public static function getUnit()                    {                        return DB::connection('mysql_dearedu_my')->select("select id from my_config_unit limit 5");                    }                }