order-food-admin/app/Models/Guess.php

72 lines
2.0 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Support\Facades\DB;
class Guess extends Model
{
use HasFactory, HasDateTimeFormatter;
protected $table = 'guess';
protected $fillable = ['image', 'name', 'num', 'start_time', 'end_time', 'status', 'prize_state', 'description'];
protected $dates = ['start_time', 'end_time'];
protected $attributes = [
'num' => 1,
'status' => self::STATUS_DISABLE,
'prize_state' => self::PRIZE_UNEXIST,
];
const STATUS_ABLE = 1; // 启用
const STATUS_DISABLE = 0; // 禁用
const PRIZE_EXIST = 1; // 选出竞猜大奖(公布答案)
const PRIZE_UNEXIST = 0; // 未选出竞猜大奖(未公布答案)
protected static function booted()
{
static::deleting(function ($guess) {
if ($guess->users()->exists()) {
throw new \Exception('已经有人竞猜无法删除!!');
}
DB::table('user_guess_option')->whereIn('user_guess_id', $guess->users()->pluck('id'))->delete();
$guess->users()->delete();
$guess->options()->delete();
});
}
public static $prizeStateMap = [
self::PRIZE_EXIST => '选出竞猜大奖',
self::PRIZE_UNEXIST => '未选出竞猜大奖',
];
public static $statusMap = [
self::STATUS_DISABLE => '禁用',
self::STATUS_ABLE => '启用',
];
public function options()
{
return $this->hasMany(GuessOption::class, 'guess_id');
}
public function users()
{
return $this->hasMany(UserGuess::class, 'guess_id');
}
public function getStatusNameAttribute() {
return data_get(self::$statusMap, $this->status);
}
public function getPrizeStateNameAttribute() {
return data_get(self::$prizeStateMap, $this->prize_state);
}
}