2017-09-15 65 views
0

我一直在努力创建一些可以将txt文件保存到mySQL数据库的东西。我已经设法创建了一些可以保存JSON文件但不包含txt文件的内容。Laravel - 将.txt文件保存到mySQL数据库

这里是有问题的文本文件: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线路0tle_line1线路1tle_line2线路2

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

我使用Laravel和狂饮的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); 
} 
+0

你可以将每一行保存到一个数据库中,然后根据请求合并这些行并创建用于下载的txt文件?那是你正在尝试做什么? – Ice76

+0

@ Ice76 - 我只想将包含在txt文件中的数据保存在数据库中。 –

回答

1

首先,我不知道你是什么响应格式,但使用香草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)在你的表,那么你已经生成阵列时添加这些字段每个阵列英寸