我正在尝试以CSV格式下载查询,目前面临两个问题:
在公用文件夹中创建了一个文件。它包含查询数据。确实很糟糕,因为它不应存在于公用文件夹中。
还下载了一个文件,但下载的文件为空。
功能如下:
public function get_chatmessages(Request $data) {
try {
if ($data->chat_to_user) {
$result = DB::connection('mysql_live')->table('user_chatmessages')
->where(function($query) use($data) {
$query->where('from_user', $data->chat_from_user)->where('to_user', $data->chat_to_user);
})->orWhere(function($query) use($data) {
$query->where('to_user', $data->chat_from_user)->where('from_user', $data->chat_to_user);
})->orderBy('date_added', 'asc')->get();
} else {
$result = DB::connection('mysql_live')->table('user_chatmessages')
->where('from_user', $data->chat_from_user)
->orWhere('to_user', $data->chat_from_user)
->orderBy('date_added', 'asc')
->get();
}
//\Log::info($data);
//\Log::info($result);
$headers = array(
"Content-type" => "text/csv",
"Content-Disposition" => "attachment; filename=file.csv",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
);
$columns = array('from_user', 'to_user', 'message', 'date_added');
$callback = function() use ($result, $columns) {
$file = fopen('output_chat.csv', 'w');
fputcsv($file, $columns);
foreach($result as $res) {
fputcsv($file, array($res->from_user, $res->to_user, $res->message, $res->date_added));
}
fclose($file);
};
//return response()->download('output_chat.csv', 'DL_output_chat.csv', $headers);
//return response()->make($callback, 200, $headers);
return response()->stream($callback, 200, $headers);
} catch (\Exception $e) {
return redirect('home')->with('error', $e->getMessage());
}
return redirect('home')->with('error', 'Etwas ist schief gelaufen');
}
答案 0 :(得分:2)
我在function getList(): readonly number[] {
return [1,2,3];
}
const list = getList();
list[2] = 5; // <-- error
php://output
答案 1 :(得分:0)
对于Laravel,有很多可以为我们提供此类实现的软件包。
并且,您可以使用Laravel Excel软件包来创建包含数据库记录的<a href="#content" class="force-reload">Click here</a>
下载文件。
此软件包具有许多有用的功能。尝试使用它。
答案 2 :(得分:0)
您可以决定文件的保存位置-您可以使用Laravel的Storage门面进行保存。
private function pathToPrivateStorage()
{
return '/private/CSVs';
}
Storage::put($this->pathToPrivateStorage, $YOURCSVFILE);
您可以阅读有关存储here的更多信息。
答案 3 :(得分:0)
尝试用$file = fopen('php://output', 'w');
代替$file = fopen('output_chat.csv', 'w');