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 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");
                    }
                }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM