2017-09-15 64 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)在你的表,那麼你已經生成陣列時添加這些字段每個陣列英寸