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


Why does Laravel call to execute() return duplicate results?

我是一个新的、缺乏经验的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"=>"Doe",3=>"Doe'

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

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

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

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