七夕 -- medoo

****>烨竹

本文参考:教程:Laravel 5.3 下添加自定义 Facade 的步骤

今天七夕,很不幸,听说前女友要结婚了,下个七夕一定不会再一个人过了;

官方文档

medoo的优点就不多做介绍了,官方首页有详细的介绍;就本人而言只是为了实现‘优雅的偷懒’;优雅在于代码的优雅,偷懒是因为学了它,就再也不用学习其他的数据库操作类了;

与laravel的交互上面,app.php后面这一段

//使用Medoo命名空间
使用Medoo \ Medoo ; 

//注册为数据库
$ app - > singleton ('database' ,function (){   
    返回新的Medoo ([  
        'database_type' => 'mysql' ,  
        'database_name' => 'name' ,  
        'server' => 'localhost' ,  
        'username' => 'your_username' ,  
        'password' => 'your_password'  
    ]);
});

不太喜欢;(或者说不太优雅,还不如去注册一个自定义的门面类)

自定义门面MedooCustom实现:

1、在App下的自定义目录,添加自定义门面类和自定义容器

/app
|- Custom
    |- Classes 这里添加自定义 Facade 类
    |- Facades 这里添加自定义容器

app/Custom/Classes/MedooCustom.php

<?php

namespace App\Custom\Classes;

use catfan\medoo;

class MedooCustom
{
    public function initMedoo($dbname)
    {
        return new medoo([
            // required
            'database_type' => 'mysql',
            'database_name' => $dbname,
            'server' => 'localhost',
            'username' => 'root',
            'password' => 'root',
            // 'port' => 3306,
        ]);
    }
}

app/Custom/Facades/MedooCustom.php

<?php

namespace App\Custom\Facades;

use Illuminate\Support\Facades\Facade;

class MedooCustom extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'medoocustom';
    }
}

2、将自定义的 Facade 和自定义的 Class 绑定起来

$ php artisan make:provider MedooCustomServiceProvider

成功后会创建一个新文件:app/Providers/MLSServiceProvider.php,然后我们在 register() 部分添点东西,如下:

<?php

namespace App\Providers;

use App\Custom\Classes\MedooCustom;
use Illuminate\Support\ServiceProvider;

class MedooCustomServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     */
    public function boot()
    {
    }

    /**
     * Register the application services.
     */
    public function register()
    {
        $this->app->bind('medoocustom', function () {
            return new MedooCustom($app->make('HttpClient'));
        });
    }
}

3、添加到自定义容器和取别名

'providers' => [
    ...
        App\Providers\MedooCustomServiceProvider::class,
    ],

'aliases' => [
    ...
 'MedooCustom' =>App\Custom\Facades\MedooCustom::class,
]

4、定义路由,控制器中直接调用

$router->get('/foo', 'HomeController@foo');
<?php

namespace App\Admin\Controllers;

use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\Dashboard;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
use MedooCustom;

class HomeController extends Controller
{
    public function foo()
    {
        //使用Medoo连接数据库
        $db = MedooCustom::initMedoo('aaa');

        $data = $db->select('movies', ['id', 'title']);

        return json_encode($data);
    }
}

demoo就不多做介绍,以前的笔记有过总结https://www.jianshu.com/p/0e552d70155e

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4

用Laravel自带的数据库操作,用不到medoo了吧

5年前 评论

@codewithyou 其实主要是我对laravel的DB门面不太熟悉;其次laravel数据库操作,第一考虑的肯定是laravel自带的ORM,碰到不能用ORM处理的操作,直接去Medoo找到对应的方法;而且我比较喜欢Medoo代码的写法;

5年前 评论

有点多此一举了,不过还是为你点赞

5年前 评论
sushengbuhuo

使用Medoo \ Medoo ; 是 use Medoo\Medoo;

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!