laravel中提供DB facade(原始查找)、查询构造器、Eloquent ORM三种操作数据库方式1、连接数据库.env 数据库配置
DB_HOST=localhost dbhost
DB_DATABASE=laravel dbname
DB_USERNAME=root username
DB_PASSWORD=root password2、使用DB facade实现CURD
(1) 新建路由
Route::get('city', 'cityController@index');
(2) 新建控制器,直接在控制器里面查询
namespace App\Http\Controllers;useIlluminate\Support\Facades\DB;class CityController extendsController {public functionindex() {$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方法根据条件每次查询固定的记录,同时内部的回调函数可以控制流程,当满足某个条件的时候可以returnfalsedd($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;useApp\City;class CityController extendsController
{public functionorm1()
{
(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;useIlluminate\Database\Eloquent\Model;class City extendsModel
{protected $table = 'city'; //指定表名 与 模型关联起来
protected $primaryKey = 'id'; //指定主键,默认是id可以不写
}2) 新增数据,自定义时间戳和批量赋值的使用:
路由:
Route::any('orm1', ['uses' => 'CityController@orm1']);
控制器:
namespace App\Http\Controllers;useApp\City;class CityController extendsController
{public functionorm1()
{//新增数据,保存数据
$city = newCity();$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;useIlluminate\Database\Eloquent\Model;class City extendsModel
{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;useApp\City;class CityController extendsController
{public functionorm1()
{//通过模型更新数据
$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;useIlluminate\Database\Eloquent\Model;class City extendsModel
{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;useApp\City;class CityController extendsController
{public functionorm1()
{//通过模型删除
$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;useIlluminate\Database\Eloquent\Model;class City extendsModel
{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.1DB_DATABASE=dearedu
DB_USERNAME=root
DB_PASSWORD=root
DB_HOST_DEAREDU_MY=127.0.0.1DB_PORT_DEAREDU_MY=3306DB_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;useApp\Member;class MemberController extendsController
{public functionindex()
{$members = Member::getMember();
}
}
app\Member.php文件配置如下:
namespace App;useIlluminate\Database\Eloquent\Model;useIlluminate\Support\Facades\DB;class Member extendsModel
{public static functiongetMember()
{return DB::select("select mid from cms_member");
}
}
app\Http\Controllers\IndexController.php文件配置如下:
namespace App\Http\Controllers;useApp\Unit;class IndexController extendsController
{public functionindex()
{$units = Unit::getUnit();
}
}
app\Unit.php文件配置如下:
namespace App;useIlluminate\Database\Eloquent\Model;useIlluminate\Support\Facades\DB;class Unit extendsModel
{public static functiongetUnit()
{return DB::connection('mysql_dearedu_my')->select("select id from my_config_unit limit 5");
}
}