RouteTransformer.php
2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
* 数据转换层: Route 转换类
+-----------------------------------------------------------------------------------------------------------------------
*
* PHP version 7
*
* @category App\Transformers
* @package App\Transformers
* @author Richer <yangzi1028@163.com>
* @date 2023年3月2日16:55:36
* @copyright 2020-2022 Richer (http://www.Richer.com/)
* @license http://www.Richer.com/ License
* @link http://www.Richer.com/
*/
namespace App\Transformers;
use App\Models\Route;
use App\Models\Traits\RouteTrait;
use Illuminate\Support\Arr;
/**
* Class RouteTransformer
* @package App\Transformers
*/
class RouteTransformer extends BaseTransformer
{
use RouteTrait;
/**
* Transform the Route entity.
*
* @param Route $model
*
* @return array
*/
public function transform(Route $model)
{
return [
'id' => (int) $model->id,
/* place your other model properties here */
'name' => (string)$model->name,
'description' => (string)$model->description,
'sites' => $model->sites->map(function ($site) {
return [
'name' => (string)$site->site->name,
'longitude' => $site->site->longitude,
'latitude' => $site->site->latitude,
'sort' => (int)$site->sort,
];
}),
'buses' => $model->buses->map(function ($bus) use ($model) {
// 根据最新定位信息获取站点的位置
$location = $bus->location;
// $next_site = $this->getSiteByLocation($bus->id, $model->sites, $location);
return [
'name' => $bus->name,
'number' => $bus->number,
'first_site' => Arr::get($location->site_info, 'first.site.name'),
'last_site' => Arr::get($location->site_info, 'last.site.name'),
'next_site' => Arr::get($location->site_info, 'next.site.name'),
'location' => [
'longitude' => $location->longitude,
'latitude' => $location->latitude,
'time' => $location->gps_time,
// 'site_info' => $location->site_info,
// 'next_site' => Arr::get($location->site_info, 'next.site.name')
],
];
}),
'sort' => (int)$model->sort,
'status' => (int)$model->status,
'status_show' => (string)$model->status_show,
'created_at' => format_date($model->created_at),
'updated_at' => format_date($model->updated_at),
];
}
}