php - 为什么 Laravel 调用 execute() 会返回重复的结果?

标签 php postgresql laravel eloquent

我是一名缺乏经验的新 Laravel 开发人员,我对得到的查询结果感到困惑。我正在尝试将查询结果写入 CSV 文件。我的代码:

$connection = fopen('/BSTablespace/someFile.txt', 'w');

$users = DB::table('users')->select('first_name', 'agent_id_from_website', 'sales_manager_id', 'last_name')->toSql();

$generator = function () use ($users){
        $db = DB::connection()->getPdo();

        $query = $db->prepare($users);
        $query->execute();

        while($user = $query->fetch()){
            yield($user);
        }
    };

foreach ($generator() as $g){
        fputcsv($connection, array_values($g));
    }
fclose($connection);

我得到的不是每列一个结果,而是 2 个。一个以列名作为键控,一个以数字索引作为键控,如下所示:

'first_name' => 'Jane', 0 => 'Jane', 'agent_id_from_website' => '450', 1 => '450', 'sales_manager_id' => 317, 2 => 317, 'last_name' => '母鹿', 3 => '母鹿'

为什么我会得到重复的结果?显然我可以忽略重复项,但我很好奇为什么 PHP、Laravel 或 Postgres 会这样处理它。

最佳答案

为什么你不只是做 ->get()?您会得到奇怪的结果,因为这就是 PHP PDO 的工作方式。您使用的这些 \Illuminate\DB 方法基本上是直接接触 PDO。

http://php.net/manual/en/pdostatement.fetch.php

它返回顺序值和语句的给定名称。这可能是为了处理返回未命名列的情况。

关于php - 为什么 Laravel 调用 execute() 会返回重复的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986279/

相关文章:

php - Laravel mongodb ->getPdo() 返回 null

javascript - 无法让 Select2 从我的 mysql 数据库获取数据

postgresql - 是否可以将 LinqPad 与 PostgreSQL 一起使用?

javascript - 如何从 WordPress 中的子主题运行外部 js 文件

php - 如何向具有复选框的查询添加分页?

database - 如何在维护历史和当前数据时获得性能?

postgresql - 在 Postgresql 中连接两个表,同时保留不匹配的行

javascript - 禁用 angularJs 路由,routeprovider 已经消失

linux - 狂欢 : Syntax Error Near Unexpected Token `' table_name'`

events - 使用关系时 Eloquent 模型事件不会触发