75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
 | 
						|
namespace App\Models\Dataset;
 | 
						|
 | 
						|
use Illuminate\Database\Eloquent\SoftDeletes;
 | 
						|
 | 
						|
use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
						|
use Illuminate\Database\Eloquent\Model;
 | 
						|
 | 
						|
class DatasetTable11 extends Model
 | 
						|
{
 | 
						|
    use HasFactory;
 | 
						|
    use SoftDeletes;
 | 
						|
 | 
						|
    protected $table = 'dataset_table11';
 | 
						|
    protected $primaryKey = 'DatasetTable11Id';
 | 
						|
 | 
						|
    protected $guarded = [];
 | 
						|
 | 
						|
    function dataset() {
 | 
						|
        return $this->belongsTo('App\Models\Dataset','dataset_id');
 | 
						|
    }
 | 
						|
 | 
						|
    public static function dataChart($modelClass,$datasetId,$templateId){
 | 
						|
 | 
						|
        $datasets = \App\Models\Dataset::where('template_id', $templateId)
 | 
						|
            ->orderBy('tahun', 'asc')
 | 
						|
            ->get()
 | 
						|
            ->map(function ($dataset) use ($modelClass) {
 | 
						|
                $dataset->items = (new $modelClass)->where('dataset_id', $dataset->id)->get();
 | 
						|
                return $dataset;
 | 
						|
            });
 | 
						|
        $years  = $datasets->pluck('tahun')->toArray();
 | 
						|
        $model = self::with('dataset')->whereHas('dataset',function($query) use ($years){
 | 
						|
            $query->whereIn('tahun',$years);
 | 
						|
        })->where('dataset_id',$datasetId)->get();
 | 
						|
        
 | 
						|
        $result = [];
 | 
						|
        foreach ($model as $row) {
 | 
						|
            $lokasi = $row->lokasi ?? 'Unknown';
 | 
						|
 | 
						|
            if (!isset($result[$lokasi])) {
 | 
						|
                $result[$lokasi] = [
 | 
						|
                    'luas' => [],
 | 
						|
                    'persen' => []
 | 
						|
                ];
 | 
						|
            }
 | 
						|
 | 
						|
            $result[$lokasi]['luas'][]   = (float) $row->luas;
 | 
						|
            $result[$lokasi]['persen'][] = (float) $row->persentase_area_kerusakan;
 | 
						|
        }
 | 
						|
 | 
						|
        return [
 | 
						|
            'title'     => 'Luas & Persentase Area Kerusakan per Wilayah',
 | 
						|
            'years'     => $years,
 | 
						|
            'yTitle'    => 'Luas (Ha)',
 | 
						|
            'yOpposite'    => 'Persentase (%)',
 | 
						|
            'series'    => collect($result)->flatMap(function ($item, $lokasi) {
 | 
						|
                return [
 | 
						|
                    [
 | 
						|
                        'name' => "Luas - {$lokasi}",
 | 
						|
                        'type' => 'column',
 | 
						|
                        'data' => $item['luas']
 | 
						|
                    ],
 | 
						|
                    [
 | 
						|
                        'name' => "Persentase - {$lokasi}",
 | 
						|
                        'type' => 'line',
 | 
						|
                        'data' => $item['persen']
 | 
						|
                    ]
 | 
						|
                ];
 | 
						|
            })->values()
 | 
						|
        ];
 | 
						|
    }
 | 
						|
}
 |