在 Laravel 框架之外使用数据库查询构建器及 Eloquent ORM

在 Laravel 框架核心代码的 illuminate/database 包中,有一个 Capsule 目录, 该目录下有一个 Manager.php 文件,如果要在 Laravel 之外使用 Illuminate Database 组件,就要通过该文件实现。以 Yii2 为例,我们首先在项目根目录下运行使用如下 Composer 命令安装该依赖包:

composer require illuminate/database ~5.1

这样在 vendor 目录下现在就有了 illuminate/database 包,接下来我们修改入口文件 index.php 如下:

<?php
// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

//引入加载 Eloquent ORM 的启动文件
require((__DIR__.'/../system/eloquent/Start.php');

$config = require(__DIR__ . '/../config/web.php');

(new yii\web\Application($config))->run();

然后我们到项目根目录下创建 system/eloquent/Start.php,编辑文件内容如下:

<?php

$database = [
    'driver' => 'mysql',
    'host' => DB_HOST,
    'database' => DB_NAME,
    'username' => DB_USER,
    'password' => DB_PASSWORD,
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => DB_TABLEPREFIX,
];

use Illuminate\Container\Container;
use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

// 创建链接
$capsule->addConnection($database);

// 设置全局静态可访问DB
$capsule->setAsGlobal();

// 启动Eloquent
$capsule->bootEloquent();

最后,我们可以到 models 目录下创建模型类如下:

<?php
namespace app\models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table = 'user';
}

这样我们就可以在代码中以 Eloquent 模型类的语法使用 User 模型了。关于 Eloquent ORM 的使用方法,可参考 Eloquent ORM 文档

此外,如果想要使用查询构建器,也就是DB,别忘了在使用类的顶部加上这行引入DB:

use Illuminate\Database\Capsule\Manager as DB;

学院君 has written 981 articles

Laravel学院院长,终身学习者

积分:112867 等级:P12 职业:手艺人 城市:杭州

7 条回复

  1. 周杰伦新歌网 周杰伦新歌网 says:
    @ 无比 谢谢,可以了!忘记了$capsule->setAsGlobal();[嘻嘻]
  2. 周杰伦新歌网 周杰伦新歌网 says:
    @ 梦回 按照您说的我尝试了下,报这个错误: Fatal error: Call to a member function connection() on a non-object in E:wampwwwxxptvendorilluminatedatabaseCapsuleManager.php on line 86
  3. 学院君 学院君 says:
    @ IamFeiWang 在使用DB的类顶部加上这个: use IlluminateDatabaseCapsuleManager as DB;
  4. 周杰伦新歌网 周杰伦新歌网 says:
    按照你的方法成功了!但是如何在其他框架里使用DB门面呢,一用就报错。求解答[可怜]
  5. 学院君 学院君 says:
    @ ADKi 恩 是的 除此之外 队列也是可以独立于Laravel使用 Laravel为此提供了原生支持
  6. 微凉清风 微凉清风 says:
    如果没有理解错的话... 操作数据库的这些方法可以独立使用~不用laravel也行.

登录后才能进行评论,立即登录?