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;
