如何使用Illuminate Database Query Builder&在PHP 5.3.x的其他框架中雄辩

时间:2013-12-18 05:05:02

标签: php laravel-4 slim illuminate-container

我过去曾与Laravel做过几个项目,但现在我需要一些非常轻松的项目并使用Slim,它非常适合我需要的东西,我想要很棒的Eloquent ORM和Laravel的查询生成器,现在不能没有它:) 现在我设法使用作曲家,使用Taylor在他的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('...')...而不是DB::table(....)的Facade简单方法,这就是我想要的,为什么重要的是你会说?那么如果我将来要转换为Laravel怎么办...我必须将所有$conn->更改为DB::所以我宁愿在第一次就做好。如果有人知道如何在第二段代码上创建Facade,我也会很高兴...感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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()的通话。这是必要的,因为胶囊全局没有注册。

修改:还要记下对setFetchMode的来电。在Laravel中使用Fluent时,查询返回stdClass的实例,但默认行为似乎是返回关联数组。框架只是覆盖了某些时候,导致Capsule以正确但意想不到的方式运行。这使它运行时具有更多预期的行为。

答案 2 :(得分:2)

使用版本4.1 of illuminate / 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();

备用易用的数据库查询构建器:

  • doctrine / dbal(btw illuminate / database使用doctrine dbal connection)
  • zendframework / zend-db(也提供表数据网关/行数据网关类)
  • j4mie / idiorm