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