将CSV文件导入Laravel控制器,并将数据插入两个表
因此,我是Laravel的完全新手,并且正在尝试一些东西。我想将CSV文件导入两个表中,我有一个名为lists的表,它将获得列表名称和.client_id
然后我有一个名为客户的表,它将获得姓名,姓氏联系电话以及.client_id
list_id
我想实现的是导入一个CSV文件,该文件将采用文件名并将其存储在列表表中,然后通过CSV文件创建一个数组,并将数据导入具有列表和客户端ID的客户表中。
我已经完成了第一部分,并且它正确地插入到列表表中,我现在如何从位于存储/文档中的CSV创建数组,然后将其插入到客户表中?
namespace App\Http\Controllers;
use Input;
use DB;
use Illuminate\Http\Request;
use App\Http\Requests\ListsRequest;
use App\Lists;
use App\Clients;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ListsController extends Controller {
public function index()
{
// $list_items = Lists::all();
$clients = Clients::all();
return view('lists.show', compact('clients'));
}
public function store(Requests\ListsRequest $request)
{
$input = $request->input();
Lists::create($input);
if (Input::hasFile('name'))
{
$file = Input::file('name');
$name = time() . '-' . $file->getClientOriginalName();
$path = storage_path('documents');
$file->move($path, $name);
// All works up to here
// All I need now is to create an array
// from the CSV and insert into the customers database
}
}
}
我选择使用我接受的答案,但我也玩了另一个答案,让它像这样工作。
public function store(Requests\ListsRequest $request)
{
$input = $request->input();
$client_id = $request->input('client_id');
if (Input::hasFile('name'))
{
$file = Input::file('name');
$name = time() . '-' . $file->getClientOriginalName();
$path = storage_path('documents');
Lists::create(['client_id' => $client_id, 'name' => $name]);
$reader = Reader::createFromPath($file->getRealPath());
// Create a customer from each row in the CSV file
$headers = array();
foreach ($reader as $index => $row)
{
if ($index === 0)
{
$headers = $row;
} else
{
$data = array_combine($headers, $row);
Customers::create($data);
}
}
$file->move($path, $name);
return view('clients');
}
}