Я пытаюсь импортировать список рассылки из CSV в мою базу данных. У меня есть две модели в моем Laravel, которая отвечает за это: Target
и Mailing
(у одной Target
есть много Mailing
)
Я использую систему очереди с Beanstalkd. Я использую:
Queue::push('ImportCSV', array( 'file' => $file->getClientOriginalName(), 'target' => $name ));
Чтобы выполнить мои задания, а затем у меня есть класс задания ImportCSV:
class ImportCSV { public function fire($job, $data) { Log::info("Starting to add {$data['target']} to database"); $target = new Target(); $target->name = $data['target']; $target->save(); $reader = new \EasyCSV\Reader($data['file']); // There must be a Email field in CSV file /*if(!in_array('Email', $reader->getHeaders() )) throw new Exception("Email field not found", 1);*/ while ($row = $reader->getRow()) { $mailing = new Mailing(); $mailing->target()->associate($target); $mailing->email = $row['Email']; $mailing->save(); } Log::info("Mailing list {$target->name} added to database"); $job->delete(); } }
Весь код, похоже, работает с тех пор, как я получаю эти сообщения в файле журнала
[2013-09-10 21:03:25] log.INFO: Starting to add TEst to database [] [] [2013-09-10 21:03:25] log.INFO: Mailing list TEst added to database [] []
Но никакие записи не добавляются в мою базу данных. Как использовать модели внутри работы? Я уже тестировал его в контроллере, например, и все работает нормально
Поскольку вы не видите других ошибок, я думаю, что это проблема среды.
Убедитесь, что ваш вызов в php artisan queue:listen
(или queue:work
, если применимо) использует правильную среду, поэтому используется правильная база данных:
$ php artisan queue:listen --env=YOUR_ENV
Вот сообщение о настройке очередей в Laravel 4, которые могут быть полезны для получения дополнительной информации.
Поскольку вы (видимо?) Не видите ошибок PHP, это менее вероятно, но другая идея:
Если ваш класс находится в пространстве имен, вам может понадобиться использовать символ \
чтобы получить ваши модели, которые находятся в глобальном пространстве имен.
// From: $mailing = new Mailing(); // To: $mailing = new \Mailing();