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

第一行告诉我们卫星名称。接下来的两行给了我们一些参数,它们总是以数字 12 开头。此格式不会更改 - 0 行的名称及其后两行,从 12 开始。

我想要做的是为每颗卫星创建一行 - object_name 列用于 0 行,tle_line1 行用于 1tle_line22

我设法创建了一些东西,可以将 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),那么您必须在生成数组时将这些字段添加到每个数组中。