讨论数量:
扩展是 maatwebsite/excel: ^3.1
, 使用 Collection
导入的. :flushed:
<?php
namespace App\Imports;
use App\Models\Competition;
use App\Models\CompetitionGroup;
use App\Models\CompetitionGroupRanking;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class CompetitionGroupRankingImport implements ToCollection
{
public $competition;
public $competitionGroup;
public function __construct(Competition $competition, CompetitionGroup $competitionGroup)
{
$this->competition = $competition;
$this->competitionGroup = $competitionGroup;
}
/**
* @inheritDoc
*/
public function collection(Collection $collection)
{
$collect = collect();
foreach ($collection as $item) {
if (isset($item[0]) && (is_numeric($item[0]) || $item[0] == null) && isset($item[1]) && $item[1]) {
$collect->push([
'competition_id' => $this->competition->id,
'competition_group_id' => $this->competitionGroup->id,
'ranking' => $item[0],
'name' => $item[1],
'score' => $item[2],
]);
}
}
CompetitionGroupRanking::query()->where('competition_id', '=', $this->competition->id)->where('competition_group_id', '=', $this->competitionGroup->id)->delete();
CompetitionGroupRanking::query()->insert($collect->toArray());
}
}
<?php
namespace App\Http\Controller;
class CompetitionController extends Controller{
/**
* 导入赛事成绩
*
* @param Request $request
*
* @return JsonResponse
*/
public function groupRankingImport(Request $request)
{
try {
$validated = $this->validate($request, [
'competition_id' => ['required', 'exists:competitions,id'],
'competition_group_id' => ['required', 'exists:competition_groups,id'],
'file' => ['required', 'file', 'mimes:xlsx,xls'],
]);
$competition = Competition::query()->find($validated['competition_id']);
$competition_group = CompetitionGroup::query()->find($validated['competition_group_id']);
Excel::import(new CompetitionGroupRankingImport($competition, $competition_group), $validated['file']);
return $this->success();
} catch (ValidationException $e) {
return $this->fail($e->validator->errors()->first());
}
}
}
推荐文章: