Laravel框架学习(使用DB门面操作数据库 原生SQL)
来源:互联网 发布:网络作家个人简介 编辑:程序博客网 时间:2024/05/19 21:00
1、连接数据库
Laravel中数据库配置文件为config/database.php,打开该文件,默认内容如下:
<?phpreturn [ //默认返回结果集为PHP对象实例 //具体返回结果可参考PDO.php(php PDO文档) // 数组格式 FETCH_ASSOC 'fetch' => PDO::FETCH_CLASS, //默认数据库连接为mysql,可以在.env文件中修改DB_CONNECTION的值 'default' => env('DB_CONNECTION', 'mysql'), 'connections' => [ //sqlite数据库相关配置 'sqlite' => [ 'driver' => 'sqlite', 'database' => storage_path('database.sqlite'), 'prefix' => '', ], //mysql数据库相关配置 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ], //Postgres数据库相关配置 'pgsql' => [ 'driver' => 'pgsql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ], //SQL Server数据库相关配置 'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', ], ], //迁移表名称 'migrations' => 'migrations', //Redis数据库相关配置 'redis' => [ 'cluster' => false, 'default' => [ 'host' => '127.0.0.1', 'port' => 6379, 'database' => 0, ], ],];
如果要修改数据库配置信息,去修改.env对应值即可。
APP_ENV=localAPP_DEBUG=trueAPP_KEY=96FsRuVPaltujCHIDWYGNEfe7Tw6nthMDB_HOST=localhostDB_DATABASE=homesteadDB_USERNAME=homesteadDB_PASSWORD=secretCACHE_DRIVER=fileSESSION_DRIVER=fileQUEUE_DRIVER=syncMAIL_DRIVER=smtpMAIL_HOST=mailtrap.ioMAIL_PORT=2525MAIL_USERNAME=nullMAIL_PASSWORD=nullMAIL_ENCRYPTION=null
2、数据库初始化
我们在项目根目录使用Artisan命令运行Laravel自带的迁移生成users表和password_reset表:
对应的数据库中会生成三张表
migrations password_resets users
3、使用DB门面进行增删改查
3.1 插入数据
我们使用DB门面执行原生SQL语句,插入操作使用DB门面的insert方法,代码如下:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Requests;use App\Http\Controllers\Controller;use DB;class TestController extends Controller{/*** Display a listing of the resource.** @return Response*/public function index(){ DB::insert('insert into users (id, name, email, password) values (?, ?, ? , ? )', [1, 'Laravel','laravel@test.com','123']); DB::insert('insert into users (id, name, email, password) values (?, ?, ?, ? )', [2, 'Academy','academy@test.com','123']); }}
在浏览器中输入http://selfstudy.com/testSql,执行成功后在数据库中插入两条记录
3.2 查询语句
$user = DB::select('select * from users where id = ?', [1]);//我们还 可以看到在执行查询的时候使用了参数绑定,以避免SQL注入。除此之//外还可以使用命名绑定:$user = DB::select('select * from users where id = :id', [':id'=>1]); dd($user);输出结果为:array:1 [ 0 => {#224 +"id": 1 +"name": "Laravel" +"email": "laravel@test.com" +"password": "123" +"remember_token": null +"created_at": "0000-00-00 00:00:00" +"updated_at": "0000-00-00 00:00:00" }]//可以看到select查询返回的结果是数组。而数组中的每一个元素都是PHP对象//修改database.php中的'fetch' => PDO::FETCH_CLASS, 修改为//PDO::FETCH_ASSOC则输出结果为数组格式。array:1 [ 0 => array:7 [ "id" => 1 "name" => "Laravel" "email" => "laravel@test.com" "password" => "123" "remember_token" => null "created_at" => "0000-00-00 00:00:00" "updated_at" => "0000-00-00 00:00:00" ]]
3.3 更新语句
$affected = DB::update('update users set name="LaravelAcademy" where name = ?', ['Academy']);echo $affected;
打印结果为1,(这里返回的是受影响的行数)如果没有更新任何记录则返回0。
3.4 删除语句
$deleted = DB::delete('delete from users');echo $deleted;
删除表记录使用DB门面的delete方法,和update类似,该方法返回被删除的行数,结果为2
3.5 通用语句
除了上述这些DML(insert/update/delete)和DQL(select)语句,SQL语句还包括DCL(create/drop等)和DDL(grant等),要运行后者,我们可以调用DB门面的statement方法:
DB::statement('drop table users');
4、监听查询事件
除此之外,我们还可以通过DB门面的listen方法监听查询事件,比如我们在记录日志和调试的时候这会给我们确定问题提供便利,可以在服务提供者的boot方法中注册该监听器,例如我们在AppServiceProvider的boot方法中定义监听器如下:
/*** 启动所有应用服务** @return void*/public function boot(){ DB::listen(function($sql, $bindings, $time) { echo 'SQL语句执行:'.$sql.',参数:'.json_encode($bindings).',耗时:'.$time.'ms'; });}
在执行sql时,就会输出以上记录。可以用来监听sql执行情况。
5、数据库事务
很多时候,我们需要执行一连串操作,而其中任何一个操作出错则整个流程失败,需要回退重来,这个时候我们就要用到数据库事务。
DB门面提供两种方式支持数据库事务,一种是调用transaction方法然后传入闭包作为参数,我们将需要进行事务操作的逻辑放到闭包函数内:
DB::transaction(function () { DB::table('users')->update(['id' => 1]); DB::table('posts')->delete();});
另一种是 beginTransaction、 rollBack和 commit三个方法一起使用从而构建一个完整的事务操作:
DB::beginTransaction();if($somethingIsFailed){ DB::rollback(); return false;}DB::commit();
此外,使用DB门面提供的事务还支持查询构建器和Eloquent ORM数据库操作。
- Laravel框架学习(使用DB门面操作数据库 原生SQL)
- Laravel学习笔记(四)---操作数据库--原生SQL语句
- laravel+Mysql 中DB原生SQL操作报1292 Truncated incorrect DOUBLE value问题解决
- Laravel框架学习(查询构建器操作数据库)
- laravel框架学习之数据库相关操作(三)
- laravel DB类SQL语句操作(CURD)
- laravel DB类SQL语句操作(CURD)
- Laravel入门教程(三)- 数据库操作 DB facade
- python中使用原生sql操作数据库
- Laravel数据库操作之-DB facade
- 安卓学习-(数据存储(数据库,原生sql,和原生安卓操作))
- Laravel框架学习(数据库高级查询)
- Laravel框架学习(数据库高级查询)
- laravel框架SQL语句操作
- laravel框架总结 -- 数据库操作
- laravel框架使用mongodb数据库
- java原生sql操作数据库
- laravel--门面
- Intel MKL基础(2)MKL的分层结构Layered Model Concept
- 欢迎使用CSDN-markdown编辑器
- [Java] int型和string型的相互转换
- Intel MKL基础(1)了解MKL、MKL资源
- Spring MVC @Transactional注解方式事务失效的解决办法
- Laravel框架学习(使用DB门面操作数据库 原生SQL)
- Java正则表达式
- PAT (Advanced Level) Practise 1043 Is It a Binary Search Tree (25)
- 安卓上传多张本地照片
- ColorTrackView
- cordova插件-motorola-datawedge-cordova-plugin
- 数据库中的游标
- IIS上部署网站
- 进程多线程