laravel6.x数据库增删改查操作【原生 SQL篇】
Laravel 能使用原生 SQL、流畅的查询构造器 和 Eloquent ORM 在各种数据库后台与数据库进行非常简单的交互。
数据库连接配置
.env
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root DB_PASSWORD=root
config/database.php
driver => mysql, host => env(DB_HOST, 127.0.0.1), port => env(DB_PORT, 3306), database => env(DB_DATABASE, test), username => env(DB_USERNAME, root), password => env(DB_PASSWORD, root),
路由设置
routes/web.php
Route::get(/index, IndexController@index);
创建控制器
在项目目录中执行命令 php artisan make:controller IndexController控制器默认创建在app/Http/controllers目录下面。
编写控制器
App/Http/Controllers/IndexController.php
<?php namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateSupportFacadesDB; class IndexController extends Controller { public function index() { // ------------------- 查询 ----------------------- $all = DB::select("select * from test"); $one = DB::select("select * from test where id = ?",[1]); $value = $tests2[0]->bo_device; foreach ($all as $one) { // select 方法将始终返回一个数组,数组中的每个结果都是一个 StdClass 对象 print_r($one->bo_device); } // ------------------- 插入 ----------------------- DB::insert(insert into test (name,age) values (?,?),[test,22]); // ------------------- 更新 ----------------------- $result = DB::update("update test set name = ccc where id = ?", [1]);// 返回影响行数 // ------------------- 删除 ----------------------- $deleted = DB::delete(delete from test where id=?,[1]);// 返回影响行数 // ------------------- 数据库事务 ----------------------- DB::transaction(function () { DB::update("update test set name = ddddd where id = ?", [2]); // throw new Exception(抛出异常, 1); 可以测试事务行不行 DB::delete(delete from test where id=?,[6]); }); // ------------------- 手动控制数据库事务 ----------------------- DB::beginTransaction();// 开启事务 try{ DB::update("update test set name = ddddd where id = ?", [2]); // throw new Exception(抛出异常, 1); 可以测试事务行不行 DB::delete(delete from test where id=?,[6]); DB::commit();// 提交 }catch(Exception $e) { DB::rollBack();// 回滚 } } }
数据库事务无效
如果事务无效的话,修改MySQL数据库引擎为InnoDB,因为MyISAM不支持事务。 先在D:phpProjectPHPTutorialMySQL中编辑my.ini 文件把里面的default-storage-engine=MyISAM改为default-storage-engine=INNODB。
查看数据库中表的引擎,命令行中的mytest是数据库名:
show table status from mytest;
在sql窗口中修改表的引擎,test是数据库名,test1是要修改引擎的数据表名:
use test; alter table test1 engine=innodb;