我过去曾与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,我也会很高兴...感谢您的帮助。
答案 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();
备用易用的数据库查询构建器: