【问题标题】:setFetchMode is ignoredsetFetchMode 被忽略
【发布时间】:2019-03-20 09:14:02
【问题描述】:

我正在尝试将 eloquent 初始化为 setFetchModePDO::FETCH_ASSOC

我已经尝试了所有可能的方法,但它不起作用。

到目前为止我尝试了什么:

使用addConnection添加它

$capsule = new Illuminate\Database\Capsule\Manager;

$capsule->addConnection([
    ...
    'fetch' => PDO::FETCH_ASSOC
]);

使用setFetchMode

$capsule->setFetchMode(PDO::FETCH_ASSOC);

使用事件:

$t = new Illuminate\Events\Dispatcher;
$t->listen(Illuminate\Database\Events\StatementPrepared::class, function ($event) {
    $event->statement->setFetchMode(PDO::FETCH_ASSOC);
});

但这些都不起作用。知道如何使PDO::FETCH_ASSOC 工作吗?

PS:我知道前两个选项不适用于最新版本的 eloquent,但我还是必须尝试一下。我愿意接受有关如何使第三个选项起作用的建议。通常,第三个应该从看起来像这样Event::listen 开始,但我不知道Events 类是从哪里来的。我还需要某种事件监听器吗?

PPS :我没有使用 Laravel,我使用的是Illuminate 的 eloquent 和 PHP 使用 composer。

【问题讨论】:

    标签: php eloquent


    【解决方案1】:

    安装illuminate/events 包并使用它:

    use Illuminate\Container\Container;
    use Illuminate\Database\Capsule\Manager;
    use Illuminate\Database\Events\StatementPrepared;
    use Illuminate\Events\Dispatcher;
    
    $capsule = new Manager;
    $capsule->addConnection([...]);
    
    $dispatcher = new Dispatcher(new Container);
    $capsule->setEventDispatcher($dispatcher);
    
    $dispatcher->listen(StatementPrepared::class, function ($event) {
        $event->statement->setFetchMode(PDO::FETCH_ASSOC);
    });
    

    【讨论】:

    • 我会试试这个,我会尽快回复你,谢谢!
    • 这个答案真的和这个答案不同吗:stackoverflow.com/a/44916109/1247113?我目前正在使用DB 外观,所以我不知道我必须添加什么而不是addConnection 中的[...]...
    • @rob74 另一个答案是针对 Laravel 用户的,这个针对数据库包的独立用户。
    • 我完全错过了这个问题只涉及 Eloquent,而不是整个 Laravel,对不起!
    猜你喜欢
    • 2011-04-22
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2016-06-05
    • 2014-02-25
    • 2011-05-09
    • 2015-02-08
    相关资源
    最近更新 更多