Laravel - 将 .txt 文件保存到 mySQL 数据库
Laravel - Saving a .txt File to mySQL Database
我一直在努力创建可以将 txt 文件保存到 mySQL 数据库中的东西。我设法创建了一些可以保存 JSON 文件但不保存 txt 文件的东西。
这是有问题的 txt 文件:http://celestrak.com/NORAD/elements/sbas.txt。此 txt 文件包含一些卫星及其数据。每颗卫星恰好三行,无一例外。因此,例如这里有一颗卫星:
AOR-E (EGNOS/PRN 120)
1 24307U 96053A 17257.68868765 -.00000150 00000-0 00000-0 0 9992
2 24307 2.8040 77.2609 0004175 104.1816 44.8421 1.00271450 76939
第一行告诉我们卫星名称。接下来的两行给了我们一些参数,它们总是以数字 1
和 2
开头。此格式不会更改 - 0
行的名称及其后两行,从 1
或 2
开始。
我想要做的是为每颗卫星创建一行 - object_name
列用于 0
行,tle_line1
行用于 1
行tle_line2
行 2
。
我设法创建了一些东西,可以将 JSON 格式的数据保存到 SQL 数据库中。也许有些人可以偏离那个?
我正在使用 Laravel 和 Guzzle 来处理 HTTP 请求:
$api = new Client([
'base_uri' => 'http://celestrak.com',
]);
$response = $api->get('jsonlocater');
$data = json_decode($response->getBody()->getContents(), true);
foreach ($data as $attributes) {
$attributes = array_change_key_case($attributes, CASE_LOWER);
Satellites::create($attributes);
}
首先,我不确定你的响应格式是什么,但使用 vanilla PHP
你可以做类似下面的事情来获取数组中的内容:
$url = 'http://celestrak.com/NORAD/elements/sbas.txt';
$lines = file($url, FILE_IGNORE_NEW_LINES);
$arrays = array_map(function($array) {
$columns = ['object_name', 'tle_line1', 'tle_line2'];
return array_combine($columns, array_map('trim', $array));
}, array_chunk($lines, 3));
现在,如果您 dd($arrays)
结果,您将得到如下内容:
根据这个结果,您应该能够轻松地在数据库中创建条目。图像中的每个数组在您的数据库 table 中应该是一个 entry/row。例如:
\DB::table('table_name')->insert($arrays);
请注意,如果您的 table 中有时间戳(created_at 和 updated_at),那么您必须在生成数组时将这些字段添加到每个数组中。
我一直在努力创建可以将 txt 文件保存到 mySQL 数据库中的东西。我设法创建了一些可以保存 JSON 文件但不保存 txt 文件的东西。
这是有问题的 txt 文件:http://celestrak.com/NORAD/elements/sbas.txt。此 txt 文件包含一些卫星及其数据。每颗卫星恰好三行,无一例外。因此,例如这里有一颗卫星:
AOR-E (EGNOS/PRN 120)
1 24307U 96053A 17257.68868765 -.00000150 00000-0 00000-0 0 9992
2 24307 2.8040 77.2609 0004175 104.1816 44.8421 1.00271450 76939
第一行告诉我们卫星名称。接下来的两行给了我们一些参数,它们总是以数字 1
和 2
开头。此格式不会更改 - 0
行的名称及其后两行,从 1
或 2
开始。
我想要做的是为每颗卫星创建一行 - object_name
列用于 0
行,tle_line1
行用于 1
行tle_line2
行 2
。
我设法创建了一些东西,可以将 JSON 格式的数据保存到 SQL 数据库中。也许有些人可以偏离那个?
我正在使用 Laravel 和 Guzzle 来处理 HTTP 请求:
$api = new Client([
'base_uri' => 'http://celestrak.com',
]);
$response = $api->get('jsonlocater');
$data = json_decode($response->getBody()->getContents(), true);
foreach ($data as $attributes) {
$attributes = array_change_key_case($attributes, CASE_LOWER);
Satellites::create($attributes);
}
首先,我不确定你的响应格式是什么,但使用 vanilla PHP
你可以做类似下面的事情来获取数组中的内容:
$url = 'http://celestrak.com/NORAD/elements/sbas.txt';
$lines = file($url, FILE_IGNORE_NEW_LINES);
$arrays = array_map(function($array) {
$columns = ['object_name', 'tle_line1', 'tle_line2'];
return array_combine($columns, array_map('trim', $array));
}, array_chunk($lines, 3));
现在,如果您 dd($arrays)
结果,您将得到如下内容:
根据这个结果,您应该能够轻松地在数据库中创建条目。图像中的每个数组在您的数据库 table 中应该是一个 entry/row。例如:
\DB::table('table_name')->insert($arrays);
请注意,如果您的 table 中有时间戳(created_at 和 updated_at),那么您必须在生成数组时将这些字段添加到每个数组中。