%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/geotechnics/api/app/Models/
Upload File :
Create Path :
Current File : /var/www/html/geotechnics/api/app/Models/BaseModel.php

<?php

namespace App\Models;

use Carbon\Carbon;
use Carbon\CarbonPeriod;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

/**
 * @property integer id
 * @property mixed created_at
 * @property mixed updated_at
 */
class BaseModel extends Model
{

    public static function getLastMonthGroups()
    {
        $date = Carbon::now()
                      ->subMonth()
                      ->startOfDay();
        $groups = self::query()
                      ->where('created_at', '>=', $date)
                      ->groupBy('date')
                      ->orderBy('date', 'ASC')
                      ->get(array(
                          DB::raw('Date(created_at) as date'),
                          DB::raw('COUNT(*) as "count"'),
                      ));

        $range = CarbonPeriod::create($date, Carbon::now());

        $data = collect();
        $total = 0;
        foreach ($range as $date) {
            $d = $groups->filter(function ($g) use ($date) {
                return $g['date'] === $date->format('Y-m-d');
            });

            $count = $d->first()['count'];
            if (!$count) {
                $count = 0;
            }

            $total += $count;
            $data->push([
                'date'  => $date->format('Y-m-d'),
                'count' => $count,
            ]);
        }
        return [
            'groups' => $data->toArray(),
            'total'  => $total,
        ];
    }

    public static function getRandomDateInLastMonth()
    {
        $start = Carbon::now()
                       ->subMonth();
        $end = Carbon::now();
        $range = CarbonPeriod::create($start, $end)
                             ->toArray();
        return $range[array_rand($range, 1)];
    }

    public static function getRandomDateInDates($from, $to)
    {
        $from = Carbon::parse($from);
        $to = Carbon::parse($to);
        $range = CarbonPeriod::create($from, $to)
                             ->toArray();
        return $range[array_rand($range, 1)];
    }

    /**
     * @param $value
     * @return string
     */
    public function getCreatedAtAttribute($value)
    {
        return Carbon::parse($value)
                     ->toIso8601String();
    }

    /**
     * @param $value
     * @return string
     */
    public function getUpdatedAtAttribute($value)
    {
        return Carbon::parse($value)
                     ->toIso8601String();
    }

    public function isClient()
    {
        /** @var User $user */
        $user = $this->getLoggedInUser();
        return $user->roles()
                    ->count() === 0;
    }

    /**
     * @return User
     */
    public function getLoggedInUser()
    {
        return $user = auth()
            ->guard('api')
            ->user();
    }

}

Zerion Mini Shell 1.0