72 lines
2.0 KiB
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);
|
|
}
|
|
}
|