Laravel 本身是一个很好用的框架, 但是每次查询数据库的时候, 都要DB::table(表名)
, 非常反人类
今天研究了一下, 发现 DB::table(表名) 实际上是返回了一个\Illuminate\Database\Query\Builder
, 而这个 builder 是在框架初始化时创建的Illuminate\Database\Connection
, 存在 app(‘db’)字段里, 那就好办了, 搞个 Base 类, 调用 db 方法的时候直接返回app('db')->query()->newQuery()
, over
截图如下
PS:
- 相关代码
基类=>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <?php
namespace App\Model;
class Base { protected static $Instance;
static public function Instance() { $class = get_called_class(); if (empty(self::$Instance[$class])) { self::$Instance[$class] = new $class; } return self::$Instance[$class]; }
protected function __construct() { }
protected function db() { return app('db')->query()->newQuery(); } }
|
查询代码=>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <?php
namespace App\Model;
use \DB;
class Test extends Base {
public function initAddressTable() { $raw_address_list = $this->db()->select('*') ->from('address') ->limit(10) ->get(); return $raw_address_list; } }
|
- 初始化数据库连接的位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
protected function registerDatabaseBindings() { $this->singleton('db', function () { return $this->loadComponent( 'database', [ 'Illuminate\Database\DatabaseServiceProvider', 'Illuminate\Pagination\PaginationServiceProvider', ], 'db' ); }); }
|