在 laravel 之外如何使用 eloquent ORM

1,206 阅读2分钟

方案其实也是看的别人的总结如下

加在eloquent orm

参考过很多 但是 比较详细是这个 安正超写的 在Laravel外独立使用Eloquent

  1. 直接修改 composer.json 加入如下节点中增加两行内容
    {
        "require": {
            "illuminate/database": "^5.0",
            "illuminate/pagination": "^5.0"
        }
    }
  1. 在终端 项目根目录下执行composer install
  2. 等待 执行结束
  3. 如果需要使用国内composer源 请移步Composer 中文镜像 / Packagist 中国全量镜像正式发布!
  4. 关于引入pagination的原因是因为database没有增加该依赖,如果调用paginate()方法必须加入此依赖

使用方法

下面的内容是我在微擎中的设置

< !--?php
/**
 * Created by PhpStorm.
 * User: hainuo
 * Date: 2017/5/12
 * Time: 13:38
 */
require_once IA_ROOT.'/vendor/autoload.php';
use Illuminate\Database\Capsule\Manager as Capsule;
class databases
{
    protected $dblink;
    public function __construct()
    {
        if(empty($this--->dblink)){
            global $_W;
            $dbconfig=$_W['config']['db'];
            $database = [
                'driver'    => 'mysql',
                'host'      => $dbconfig['host'],
                'database'  => $dbconfig['database'],
                'username'  => $dbconfig['username'],
                'password'  => $dbconfig['password'],
                'charset'   => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix'    => $dbconfig['tablepre'],
            ];
            $Capsule = new Capsule;
//创建数据库链接
            $Capsule->addConnection($database);
// 设置全局静态可访问
            $Capsule->setAsGlobal();
// 启动Eloquent
            $Capsule->bootEloquent();
            $this->dblink=$Capsule;
        }
        return $this->dblink;
    }
}

说明其实在 执行了$Capsule->bootEloquent();一句后就已经将类静态化了,只要在使用的地方

include db.php
//在合适位置 引入下面的话
use Illuminate\Database\Capsule\Manager as DB;
use Illuminate\Pagination\Paginator;
new database();
$result=DB::table('xxx')->find(1);

关于分页需要讲的

  1. 引入分页

    use Illuminate\Database\Capsule\Manager as DB;
    use Illuminate\Pagination\Paginator;
  2. 调用 paginate() 方法 生成分页数据

    $data = DB::table('xxxx')->where('uid', $uid)->orderBy('id', 'desc')->paginate(10);
  3. 不要以为上面就搞定了 纳尼, 还需要如此

    $list = $data->items();
    $pager = $data->render();//如果路径在二级目录下 分页访问的url 会指向根目录
  4. 这样算是搞定了吧, 纳尼 还有坑呢

    1. 参数 url参数 怎么弄 $data->append(key,value) $data->append($quer)
    2. path 如何设置 #eloquent orm 如何设置path#

      Paginator::currentPageResolver(function () use ($page) {
              return $page;
          });
    3. 当前页码如何设置 #eloquent orm 如何设置当前读取的页码对应的数据`

      Paginator::currentPathResolver(function () {
          return '/app';
      });
      
    4. 到这里才算完事

      补记

      昨天写完后,总觉得缺少些东西
      今天思考下才知道是为什么。因为 2 和 3 是查看了很多源码 才明白的。
      就是说作者将设置分为两类 一种是普通用法,比如设置参数,比如生成分页html另一种是高级用法 配置基础东西 比如 这里的路径问题,一般人使用不到或者说在laravel中都已经被处理好了,基本不需要设置的,比如这里的分页内容获取 指定获取第3页的内容 在laravel中也是配置好的,所以也不需要大家操心。