Laravel 4 - 在运行时设置database.fetch配置

mtm*_*ald 5 php laravel laravel-4

在Laravel 3中,我可以在运行时设置数据库'fetch'配置(将结果作为数组而不是对象获取):

Config::set('database.fetch', PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)

在Laravel 4中,结果仍然作为对象返回.

我究竟做错了什么?

[编辑 - 额外细节]

我决定测试配置是否正在设置,并且还要在Laravel 3和Laravel 4中并排尝试相同的代码段.

//first fetch as object
Config::set('database.fetch', PDO::FETCH_CLASS);
//Laravel 3 and 4 returns 88 ... expected:
echo PDO::FETCH_CLASS.Config::get('database.fetch');
$users = $users = DB::table('users')->get();
//Laravel 3 and 4 both return an array of objects(stdClass) ... expected
var_dump($users);

//then fetch as array
Config::set('database.fetch', PDO::FETCH_ASSOC);
//Laravel 3 and 4 returns 22 ... expected:
echo PDO::FETCH_ASSOC.Config::get('database.fetch');
$users = $users = DB::table('users')->get();
//Laravel 3 returns an array of arrays ... expected
//Laravel 4 returns an array of objects(stdClass) ... UNEXPECTED!
var_dump($users);
Run Code Online (Sandbox Code Playgroud)

fid*_*per 16

TL; DR:不要使用config进行运行时更改

配置集在初始化时为获取模式.这通常适用于所有Illuminate库.

如果需要在运行时更改获取模式,则需要在连接对象而不是配置中设置此模式.

幸运的是,我们可以访问连接对象.

请注意,该Connection对象有一个setFetchMode()方法.

直接使用连接对象

这意味着在您的代码中,您可以获取连接,然后setFetchMode(PDO::FETCH_ASSOC)在查询数据库之前使用它.

// With Query Builder
$query = DB::connection()->setFetchMode(PDO::FETCH_ASSOC);

// With Eloquent model
$user = new User;
$user->getConnection()->setFetchMode(PDO::FETCH_ASSOC);
Run Code Online (Sandbox Code Playgroud)