我正在使用Laravel 5.4队列。我想阅读Excel并在几秒钟后输入该记录的数据库。
$queue = Queue::later(10,'LogMsg', app('App\Http\Controllers\getFileController')->myfunc($name));
return $queue;
这是我的通话功能,首先我可以这样通过吗?
public function myfunc($name) {
$f_data = Excel::load('public/invoices/'.$name, function($reader) {
})->get();
if(!empty($f_data) && $f_data->count()){
foreach ($f_data as $key => $row){
$inv = new final_tables;
foreach ($row as $key1 => $col){
$inv->$key1 = $row->$key1;
}
$inv->save();
}
}
return 'done';
}
答案 0 :(得分:0)
我认为你真正想做的是异步处理excel,你可以写一个工作类来做同样的事情。可以从控制器功能调度作业类,并在后台运行。
具有相同功能的示例作业如下所示:
class ReadExcelAndSaveRecordsToDB implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $filePath;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(string $filePath)
{
$this->filePath = $filePath;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$fileData = Excel::load($this->filePath, function($reader) {
})->get();
//Whatever you want to do with the file here, for eg. create a DB entry
return 'done';
}
}
现在您可以从控制器功能调度相同的作业,如下所示:
use Carbon\Carbon;
public function someControllerAction(Request $request)
{
$filePath = //Save file and obtain filepath
$job = (new ReadExcelAndSaveRecordsToDB($filePath))
->delay(Carbon::now()->addMinutes(10));
dispatch($job);
}
那应该为你做。