在 Laravel 3 中,我可以在运行时设置数据库“获取”配置(以数组而不是对象的形式获取结果):
Config::set('database.fetch', PDO::FETCH_ASSOC);
在 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);
TL;DR:不要使用配置进行运行时更改
配置集是初始化时的获取模式only。对于所有 Illuminate 库来说通常都是如此。
如果您需要更改 fetch-moderun-time,您需要在连接对象上而不是在配置中设置它。
幸运的是,我们可以访问连接对象。
请注意,Connection
对象有一个setFetchMode() https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Connection.php#L828 method.
直接使用连接对象
这意味着在您的代码中您可以获取您的连接 http://fideloper.com/laravel-multiple-database-connections然后运行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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)