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

时间:2016-05-02 15:37:18

标签: 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' => ' Doe',3 => ' Doe的'

为什么我会得到重复的结果?显然我可以忽略重复,但我非常好奇为什么PHP,Laravel或Postgres以这种方式处理它。

1 个答案:

答案 0 :(得分:0)

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

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

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