laravel框架之数据库

准备

laravel基础和环境搭建可以参考

《laravel入门及技术指南》https://blog.csdn.net/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,访问一下

http://127.0.0.1:8000/db,如下显示

我们上面只是搭建了访问数据库的基本路由,还没有真正配置数据库,访问真正的数据库内容,下面继续。

我们建立数据库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基本操作方法,对于我们做数据表一些简单操作提供一些支持,但对于实际应用中可能并不太适用,实际应用可能更灵活复杂,单表操作的很少,用来做简单测试使用一下,懂得原理就可以了。

 

Guess you like

Origin blog.csdn.net/yan_dk/article/details/117447441