1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-29 22:01:38 +08:00
2019-12-13 00:10:10 +08:00

93 lines
2.1 KiB
PHP

<?php
namespace App\Transformers;
use App\Repos\Category as CategoryRepo;
use App\Repos\CourseCategory as CourseCategoryRepo;
use App\Repos\User as UserRepo;
class CourseList extends Transformer
{
public function handleCategories($courses)
{
$categories = $this->getCategories($courses);
foreach ($courses as $key => $course) {
$courses[$key]['categories'] = $categories[$course['id']] ?? [];
}
return $courses;
}
public function handleUsers($courses)
{
$users = $this->getUsers($courses);
foreach ($courses as $key => $course) {
$courses[$key]['user'] = $users[$course['user_id']];
}
return $courses;
}
public function handleCourses($courses)
{
foreach ($courses as $key => $course) {
unset($courses[$key]['details']);
}
return $courses;
}
protected function getCategories($courses)
{
$categoryRepo = new CategoryRepo();
$categories = $categoryRepo->findAll();
$mapping = [];
foreach ($categories as $category) {
$mapping[$category->id] = [
'id' => $category->id,
'name' => $category->name,
];
}
$courseIds = kg_array_column($courses, 'id');
$courseCategoryRepo = new CourseCategoryRepo();
$relations = $courseCategoryRepo->findByCourseIds($courseIds);
$result = [];
foreach ($relations as $relation) {
$categoryId = $relation->category_id;
$courseId = $relation->course_id;
$result[$courseId][] = $mapping[$categoryId] ?? [];
}
return $result;
}
protected function getUsers($courses)
{
$ids = kg_array_column($courses, 'user_id');
$userRepo = new UserRepo();
$users = $userRepo->findByIds($ids, ['id', 'name', 'avatar'])->toArray();
$result = [];
foreach ($users as $user) {
$result[$user['id']] = $user;
}
return $result;
}
}