php - Laravel - 将 .txt 文件保存到 mySQL 数据库

标签 php mysql laravel laravel-5.4

我一直在努力创建一些可以将 txt 文件保存到 mySQL 数据库中的东西。我已经成功创建了一些可以保存 JSON 文件但不保存 txt 文件的东西。

这是有问题的 txt 文件:https://celestrak.org/NORAD/elements/sbas.txt 。此 txt 文件包含一些卫星及其数据。每颗卫星都恰好有三行,无一异常(exception)。例如,这是一颗卫星:

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对于 1 行和 tle_line2 对于 2 行。

我已经成功创建了一些东西,可以将 JSON 格式的数据保存到 SQL 数据库中。也许有些可以偏离这一点?

我使用 Laravel 和 Guzzle 来处理 HTTP 请求:

$api = new Client([
    'base_uri' => 'https://celestrak.org',
]); 
$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);
}

最佳答案

首先,我不确定您的响应格式是什么,但使用普通 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) 结果,您将得到如下所示的结果:

enter image description here

根据此结果,您应该能够轻松地在数据库中创建条目。图像中的每个数组应该是数据库表中的一个条目/行。例如:

\DB::table('table_name')->insert($arrays);

请注意,如果您的表中有时间戳(created_at 和 Updated_at),那么您必须在生成数组时在每个数组中添加这些字段。

关于php - Laravel - 将 .txt 文件保存到 mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46248306/

相关文章:

php - Virtuemart $变量。我在哪里可以学习/输出它们?

mysql - 查询具有不同值的相同列

java - 我们应该什么时候关闭数据库连接

laravel - 使用关系在 Laravel Eloquent 中选择字段

Laravel 表单验证

php - 表单发送空白值

php - 为什么 Laravel 的重置密码功能使用数据库,而电子邮件验证使用签名路由?

php - 处理 CSV 中的逗号

mysql - Visual Studio Express 2008 可以连接到 MySQL 吗?

php - 我应该使用Put、Patch 和Delete 吗?我正在读一些东西,这让我想知道使用它们是否符合惯例