私は経験の浅いLaravelの開発者です。私が得意なクエリ結果には戸惑います。私は、CSVファイルにクエリの結果に書き込もうとしています。私のコード:Laravelがexecute()を呼び出して重複した結果を返すのはなぜですか?
$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);
代わりに、列ごとに1つの結果を得るための、私はそうのように、列名と数値インデックスとキー1とキー2つを得る:
「first_nameの」=>「ジェーン'、0 =>' Jane '、' agent_id_from_website '=>' 450 '、1 =>' 450 '、' sales_manager_id '=> 317,2 => 317、' last_name '=>' Doe '、3 =>' Doe '
なぜ結果が重複していますか?明らかに私は重複を無視することができますが、PHP、Laravel、またはPostgresがこのように処理する理由については非常に興味があります。
私は結果セットのすべての行を一度にメモリに保持したくないので、> get()を使用していません。私はジェネレータを使用しているので、行をファイルごとに行単位で追加することができます。 – brianfr82
代わりに 'chunk()'を使うことを強くお勧めします。これにより結果がページングされ、PDOのナンセンスが処理されます。 https://laravel.com/api/5.1/Illuminate/Database/Eloquent/Builder.html#method_chunk – Josh
私はクエリ結果のすべてのレコードを含むCSVファイルを作成しています。 chunk()は各チャンクに対してクエリを再実行します。私はこれをできるだけ実行可能なものにしようとしています。しかし、提案をありがとう。 – brianfr82