#php #laravel #csv #laravel-8
Вопрос:
Я использую Laravel 8.
У меня есть .csv
файл, хранящийся в /public/data/object.csv
. Я хочу заполнить таблицу, проанализировав этот файл. Этот .csv
файл n
содержит строки, заключенные в "
Я попытался импортировать .csv
непосредственно в MySQL, но я получаю сообщение об ошибке, что у меня меньше полей, необходимых в данной строке. Я проверил с помощью Python, и мой файл в порядке (все записи содержат четыре поля), поэтому я думаю, что это, должно быть, проблема с анализатором .csv MySQL… Поэтому я хочу создать сеялку, которая строчно считывает файл, печатает в консоли, сколько полей у меня есть для данной записи, выполняет синтаксический анализ и создает модели с помощью ORM.
Я знаю, что это неэффективно или оптимально, но это была бы одноразовая операция.
Теперь дело в том… как мне получить доступ к .csv
файлу?
Я сохранил его в каталоге сеялок, поэтому по глупости подумал, что это сработает:
//...
class ObjectSeeder extends Seeder
{
public function run()
{
$file = fopen('objetos.csv', 'r');
// ...
fclose($file);
}
}
//...
Это вызывает исключение: fopen(objetos.csv): failed to open stream: No such file or directory
. Поэтому я изменил файл , в котором должен находиться /public/data
, /storage/app/data
и не могу получить к ним доступ с помощью таких маршрутов, как ../public/data/objects.csv
Когда файл находится в хранилище, я могу получить к нему доступ через $content = Storage::disk('local')->get('data/schedule.dat');
. Проблема в том, что я не могу разобрать строку с помощью fgetcsv()
, потому что это не обработчик файлов. Я не могу разбить файл n
на использование str_getcsv()
, потому что, как я уже сказал, файл содержит строки с n
Я знаю, что это должно быть супер просто, и это единственная проблема в том, куда поместить файл, чтобы у меня был настоящий обработчик файлов.
Комментарии:
1. Любой файл, начинающийся с,
/
будет искать его в корневом каталоге системы , а не в корневом каталоге проекта./public/data
не будет правильным2. Я попытался открыть их так
../public/data
же, как./objetos.csv
и при хранении в каталоге сеялки, также какpublic_path('/public/data')
и так… Я уже знаю, что ты говоришь, спасибо3. пробовать
fopen(public_path('data/objetos.csv', 'r'));
4. Это правильный ответ… Наконец-то у меня все получилось, большое спасибо!