我正在尝试使用maatiswebsite将excel文件导入数据库。为此,我正在使用队列,因为导入文件需要一些时间。我想向用户显示一条快速消息,“您的文件正在导入。完成后我们会通知您”。但无法做到。
QUEUE_DRIVER =数据库
这是我到目前为止所做的-
控制器-
public function import(Request $request)
{
Excel::filter('chunk')->load($request->file('import_file')
->getRealPath())->chunk(250, function($reader)
{
ImportDistributor::dispatch(new ImportDistributor($reader->toArray()));
});
dd('your file is being imported. we will inform you once it is done.');
}
工作-
public function handle()
{
if(isset($this->data) && !empty($this->data))
{
foreach($this->data as $data)
{
DB::table('user_details')->insert($data);
}
}
}
模型-
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class UserDetailsModel extends Model
{
protected $table = 'user_details';
}
我无法在user_details中存储数据。
答案 0 :(得分:1)
您需要在模型中添加$fillable
属性,并将所有要保存到数据库的字段添加
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class UserDetailsModel extends Model
{
protected $table = 'user_details';
protected $fillable = ["name", "etc", "etc1"];
}
然后在Job中,将代码更改为此。
use App\UserDetailsModel;
public function handle()
{
if(isset($this->data) && !empty($this->data))
{
foreach($this->data as $data)
{
UserDetailsModel::insert($data);
}
}
}
尝试一下。我认为这可以解决您的问题。
答案 1 :(得分:1)
如果在使用同步驱动器时导入工作正常,则意味着您需要run the queue worker:
php artisan queue:work