准备
laravel基础和环境搭建可以参考
《laravel入门及技术指南》https://blog.youkuaiyun.com/yan_dk/article/details/117375890
laravel操作数据库
建立基本数据库访问组件框架
建立自定义路由(数据库)
app/providers/RouteServiceProvider.php,增加路由服务
//数据库操作路由
protected function mapDbRoutes()
{
Route::middleware('web')
->namespace('App\Http\Controllers')
->group(base_path('routes/db.php'));
}
调用路由服务
建立相应的路由配置文件routes/db.php
<?php
Route::get('db',function (){
dd(config());
});
这样,就已经快速构建了数据库访问路由,我们启动服务器127.0.0.1:8000,访问一下
我们上面只是搭建了访问数据库的基本路由,还没有真正配置数据库,访问真正的数据库内容,下面继续。
我们建立数据库mysql,启动数据库服务器,建立测试库db_laravel,测试表goods。
数据库默认连接参数修改 .env文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db_laravel
DB_USERNAME=root
DB_PASSWORD=root
建立数据库访问控制器
> php artisan make:controller DbController
user DB;
class DbController extends Controller{
public function conn() {
//找到默认的配置
$result = DB::select('select * from goods');
dd($result);
}
}
路由配置修改routes/db.php
//配置连接
Route::get('conn','DbController@conn');
浏览器访问http://127.0.0.1:8000/conn
自定义数据库访问配置
在应用中,可能会访问多数据库环境,我们需要自定义配置不同的数据库,.env只是系统默认数据库连接配置,那么我们继续配置自定义数据库配置。
环境准备:建立测试数据库db_yunyan,测试表test
修改数据库配置文件config/database.php,增加如下
'mysql_yunyan' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => 'db_yunyan',
'username' => 'root',
'password' => 'root',
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
控制器文件DbController 增加方法:
public function conn_yunyan() {
//指定配置连接
$result = DB::connection('mysql_yunyan')->select('select * from test');
dd($result);
}
路由配置修改routes/db.php
//自定义配置
Route::get('conn_yunyan','DbController@conn_yunyan');
浏览器访问http://127.0.0.1:8000/conn_yunyan
CRUD数据库操作
控制器文件DbController 增加方法:
//crud
public function crud_insert() {
//预处理sql
//select参数:1、sql语句 2、预处理语句的值(数组传参)
/* $result = DB::connection('mysql_yunyan')->select('select * from test where id = ?', [3]);
$result1 = DB::connection('mysql_yunyan')->select('select * from test where id = :id', ['id'=>3]);*/
//新增
$result1 = DB::connection('mysql_yunyan')->select('insert into test (`age`,`username`) value (?,?)', ['38','yunyan2']);
//修改
//删除
$result = DB::connection('mysql_yunyan')->select('select * from test');
dd($result);
}
路由配置修改routes/db.php
//curd操作
Route::get('crud_insert','DbController@crud_insert');
浏览器访问http://127.0.0.1:8000/crud_insert
数据库事务控制操作
控制器文件DbController 增加方法:
//事务控制
public function trans() {
//自动事务
/* DB::transaction(function (){
//修改
$num = DB::update("update goods set goods_name = 'Macos' where id = :id",['id'=>1]);
//删除
$num1 = DB::delete('delete from goods where id = 7');
var_dump($num,$num1);
try{
if ($num > 0 && $num1 > 0) {
return '事务操作成功';
}else {
throw new \Exception('事务操作失败');
}
}catch (Exception $e){
return $e->getMessage();
}
});*/
//手动事务
DB::connection('mysql_yunyan')->beginTransaction();
//修改
$num = DB::connection('mysql_yunyan')->update("update test set username = 'yunyan_upd2' where id = :id",['id'=>2]);
//删除
$num1 = DB::connection('mysql_yunyan')->delete('delete from test where id = 7');
if ($num > 0 && $num1 > 0) {
echo '事务操作成功';
//事务提交
DB::connection('mysql_yunyan')->commit();
}else {
//事务回滚
echo '事务操作失败';
DB::connection('mysql_yunyan')->rollBack();
}
}
路由配置修改routes/db.php
//事务操作
Route::get('trans','DbController@trans');
浏览器访问http://127.0.0.1:8000/trans
数据库迁移
laravel提供了基本的数据库模型,主要是用户认证相关表,包括users、password_resets。可以通过命令来生成数据库表、及迁移记录。当然还可以增加扩展。
我们需要启动数据库服务器,按默认配置.env中连接数据库参数连接,执行命令如下
# php artisan migrate
执行后,laravel将在连接的数据库中建立生成默认的数据表users、password_resets、failed_jobs等,我们可以根据应用需要,选择用还是不用,还是在此基础扩展,也可以新添加
程序的migrations目录会生成上述日志文件。
问题:执行指令时可能会报错,
答:注意config/database.php配置参数
,改成这样应该就可以,这是laravel基本库的连接要求,生成默认的数据表。
创建数据库模型
Eloquent模型,是一种面向对象编程中解决不同系统间数据的转化方案。创建出虚拟对象的数据库。
# php artisan make:model Model\Admin
程序目录自动创建对象Admin.php
我们可以对应创建相应的数据表admin,laravel默认对应表是加s,如果指定表名,可以在模型类中定义,还有很多自定义选项的定义。
class Admin extends Model
{
//
protected $table = 'admin';
}
创建模型的控制器
# php artisan make:controller EloquentController
use App\Model\Admin;
class EloquentController extends Controller
{
public function index() {
//查询所有数据
dump(Admin::all());
}
}
增加路由服务,app/providers/RouteServiceProvider.php,
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
//模型控制器路由
$this->mapEloquentRoutes();
//
}
//模型控制器路由
protected function mapEloquentRoutes()
{
Route::middleware('web')
->namespace('App\Http\Controllers')
->group(base_path('routes/eloquent.php'));
}
添加路由配置文件 routes/eloquent.php
Route::get('Eloquent','EloquentController@index');
然后我们启动数据库服务器,测试数据表admin输入测试数据,启动服务器,访问http://127.0.0.1:8000/Eloquent
就可以立刻看到访问结果了。
小结:laravel提供的数据库模型,直接与数据表关联,提供一套模型表CRUD基本操作方法,对于我们做数据表一些简单操作提供一些支持,但对于实际应用中可能并不太适用,实际应用可能更灵活复杂,单表操作的很少,用来做简单测试使用一下,懂得原理就可以了。