2

过去我用 Laravel 做过几个项目,但现在我需要一个非常轻量级的项目,然后使用 Slim,它非常适合我的需要,我想要 Laravel 的出色的 Eloquent ORM 和查询构建器,不能现在不用它:) 现在我设法让这一切都与作曲家一起工作,使用泰勒在他的 GitHub 上显示的信息,复制了他的一段代码

use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => '',
    'username'  => '',
    'password'  => '',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]);

// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));

// Set the cache manager instance used by connections... (optional)
$capsule->setCacheManager(...);

// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();

这在我的本地开发(PHP 5.4.x)上非常有效,但是当我把它放在我的服务器PHP 5.3.x上时,它就不再工作了:(现在我看到 1 个问题是我们不能使用匿名数组像这样[],但应该写成旧的方式array(),那就是在addConnection(array($settings))伟大的内部,现在更远一点......但是之后它似乎在内部崩溃$capsule->setEventDispatcher()并且我的服务器上没有日志(我只通过 var_dump( )在这里和那里),它只是一个 NAS,我什至不想花几个小时来了解如何启用它。但有趣的是,我有一个 Laravel 4 项目正在使用它......那么为什么只构建它的一部分Illuminate\Database不起作用呢?我还发现了另一段代码让 Eloquent ORM 在 PHP 5.3.x 中工作

$settings = array(
    'driver' => '',
    'host' => '127.0.0.1',
    'database' => '',
    'username' => '',
    'password' => '',
    'charset'   => "utf8",
    'collation' => 'utf8_general_ci',
    'prefix' => ''
);


// Bootstrap Eloquent ORM
$connFactory = new \Illuminate\Database\Connectors\ConnectionFactory(new Illuminate\Container\Container);
$conn = $connFactory->make($settings);
$resolver = new \Illuminate\Database\ConnectionResolver();
$resolver->addConnection('default', $conn);
$resolver->setDefaultConnection('default');
\Illuminate\Database\Eloquent\Model::setConnectionResolver($resolver);

但是如果我使用这段代码,顺便说一句,这对模型很好。我需要使用$conn->table('...')...而不是我想要的 Facade 简单方式DB::table(....),为什么你会说它很重要?好吧,如果我将来想转换为 Laravel 怎么办...我必须将所有内容更改为$conn->DB::所以我宁愿第一次就做对。如果有人知道如何在第二段代码上创建外观,我也会很高兴......感谢您的帮助。

4

3 回答 3

3

查看 PPI 2.1 中的 Laravel 数据源连接器

https://github.com/ppi/framework/tree/2.1/PPI/DataSource/Connection

于 2013-12-18T15:59:42.500 回答
3

我也在使用 Capsule 和 Slim。首先,确保您使用的是 Illuminate/Capsule 的 4.1.* 版本。当 4.2 出现时,其中一个重大变化是 PHP 5.4 成为了最低要求。4.1 仍然适用于 PHP 5.3。

现在,如果你已经这样做了,但仍然遇到问题,这就是我使用 Slim 的 IoC 容器注册胶囊的方式:

$app->container->singleton('capsule', function() use ($config) {
    $capsule = new Illuminate\Database\Capsule\Manager;

    $capsule->setFetchMode(PDO::FETCH_OBJ);
    $capsule->addConnection($config['database']);
    $capsule->bootEloquent();

    return $capsule->getConnection();
});

注意对 的调用getConnection()。这是必要的,因为 Capsule 全局未注册。

编辑:还要注意对setFetchMode. 在 Laravel 中使用 Fluent 时,查询返回 stdClass 的实例,但默认行为似乎是返回关联数组。该框架只是在某些时候覆盖了它,导致 Capsule 以正确但出乎意料的方式运行。这使它以更多预期的行为运行。

于 2014-08-06T14:32:02.347 回答
2

使用 4.1 版的Illumination/database...单连接的简单案例:

// $app is a Slim instance

// add db connection parameters to the app config using mysql / utf8

$app->config(array(
    'db' => array(
        'driver'    => 'mysql',
        'host'      => 'locahost',
        'database'  => 'mydbname',
        'username'  => 'myuser',
        'password'  => 'mypass',
        'charset'   => 'utf8',
        'collation' => 'utf8_general_ci',
        'options'   => array(
            \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
        ),
        'prefix'    => '',
    ),
));

// make sure we always use the same service instance

$app->container->singleton('capsule', function($c) use($app) {
    $capsule = new \Illuminate\Database\Capsule\Manager();
    $capsule->addConnection($params);

    return $capsule;
});

// USE IT ANYWHERE the slim $app instance or the slim app container are visible 

$capsule = $app->capsule;
// ...or if $c is the container
// $capsule = $c->get('capsule');
$people = $capsule->table('person')->take(10)->get();

替代易于使用的数据库查询构建器:

  • 教义/dbal(顺便说一句,照亮/数据库使用教义dbal连接)
  • zendframework/zend-db(也提供表数据网关/行数据网关类)
  • j4mie/惯用语
于 2014-02-23T02:20:50.687 回答