So, I have a complete noob for Laravel and have tried something here. I want to import a CSV file into two tables, I have a table called lists, which will get the list name and client_id .
Then I have a table called clients, which will get the contact number of the last name, as well as client_id and list_id .
What I want to achieve is to import a CSV file that will take the file name and save it in the list table, then create an array through the CSV file and import the data into the client table with the list and client ID.
I have the first part, and it is inserted correctly in the list table. How can I now create an array from CSV, which is located in the repository / documents, and then insert it into the client table?
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 } } }
I decided to use the answer that I accepted, but I also played with a different answer and made it work as follows.
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'); } }
source share