use Eloquent mutators/accessors

This commit is contained in:
Tony Murray
2020-04-10 20:04:14 -05:00
parent 394e698e5a
commit 525c4f0f8e
3 changed files with 39 additions and 16 deletions

View File

@@ -27,34 +27,45 @@ namespace App\Models;
use Carbon\Carbon;
use Carbon\CarbonImmutable;
use Date;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class AlertSchedule extends Model
{
/** @property Carbon start */
public $timestamps = false;
protected $table = 'alert_schedule';
protected $primaryKey = 'schedule_id';
protected $casts = [
'start' => 'datetime',
'end' => 'datetime',
];
protected $appends = ['start_recurring_dt', 'end_recurring_dt', 'start_recurring_hr', 'end_recurring_hr'];
private $timezone;
private $array = [
'start_recurring_dt' => $schedule->recurring == 0 ? '' : $start->toDateString(),
'end_recurring_dt' => $schedule->recurring == 0 || $end->year == 9000 ? '' : $end->toDateString(),
'start_recurring_hr' => $schedule->recurring == 0 ? '' : $start->toTimeString('minute'),
'end_recurring_hr' => $schedule->recurring == 0 ? '' : $end->toTimeString('minute'),
'recurring_day' => $schedule->recurring == 0 ? '' : str_replace($days['from'], $days['to'], $schedule->recurring_day),
];
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->timezone = config('app.timezone');
}
// ---- Accessors/Mutators ----
public function getStartAttribute() {
return Date::parse($this->attributes['start'], 'UTC')->tz($this->timezone);
}
public function setStartAttribute($start) {
$this->attributes['start'] = $this->fromDateTime(Date::parse($start)->tz('UTC'));
}
public function getEndAttribute() {
return Date::parse($this->attributes['end'], 'UTC')->tz($this->timezone);
}
public function setEndAttribute($end) {
$this->attributes['end'] = $this->fromDateTime(Date::parse($end)->tz('UTC'));
}
public function getStartRecurringDtAttribute()
{
return $this->start->tz()->toDateString();
return $this->start->toDateString();
}
public function getStartRecurringHrAttribute() {
@@ -70,8 +81,19 @@ class AlertSchedule extends Model
}
public function setStartRecurringDtAttribute($date) {
$date = Carbon::parse($date);
$this->attributes['start']->set
$this->start = $this->start->setDateFrom(Date::parse($date, $this->timezone));
}
public function setStartRecurringHrAttribute($time) {
$this->start = $this->start->setTimeFrom(Date::parse($time, $this->timezone));
}
public function setEndRecurringDtAttribute($date) {
$this->end = $this->end->setDateFrom(Date::parse($date ?: '9000-09-09', $this->timezone));
}
public function setEndRecurringHrAttribute($time) {
$this->end = $this->end->setTimeFrom(Date::parse($time, $this->timezone));
}
// ---- Query scopes ----

View File

@@ -212,6 +212,7 @@ return [
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'Date' => Illuminate\Support\Facades\Date::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,

View File

@@ -14,7 +14,7 @@ class AlertScheduleUtc extends Migration
{
DB::table('alert_schedule')->update([
'start' => DB::raw("CONVERT_TZ(IF(`recurring` = 1, STR_TO_DATE(CONCAT(start_recurring_dt, ' ', start_recurring_hr), '%Y-%m-%d %H:%i:%s'), start), @@global.time_zone, '+00:00')"),
'end' => DB::raw("CONVERT_TZ(IF(`recurring` = 1, STR_TO_DATE(CONCAT(IFNULL(end_recurring_dt, '9000-9-9'), ' ', end_recurring_hr), '%Y-%m-%d %H:%i:%s'), end), @@global.time_zone, '+00:00')"),
'end' => DB::raw("CONVERT_TZ(IF(`recurring` = 1, STR_TO_DATE(CONCAT(IFNULL(end_recurring_dt, '9000-09-09'), ' ', end_recurring_hr), '%Y-%m-%d %H:%i:%s'), end), @@global.time_zone, '+00:00')"),
'recurring_day' => DB::raw('REPLACE(recurring_day, 0, 7)'), // convert to RFC N date format
]);