| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | 
							- <?php
 - 
 - namespace App\Models;
 - 
 - use Illuminate\Database\Eloquent\Casts\Attribute;
 - use Illuminate\Database\Eloquent\Factories\HasFactory;
 - use Illuminate\Database\Eloquent\Model;
 - use Illuminate\Database\Eloquent\SoftDeletes;
 - use Illuminate\Support\Facades\Storage;
 - use RalphJSmit\Laravel\SEO\Support\HasSEO;
 - use App\Models\NewsCategory;
 - use Spatie\Translatable\HasTranslations;
 - 
 - class News extends Model
 - {
 -     use HasFactory, SoftDeletes, HasTranslations;
 - 
 -     protected $casts = [
 -         'on_top' => 'boolean',
 -         "list_audit_state" => "string",
 -     ];
 - 
 -     protected $guarded = ['id'];
 -     protected $appends = ["news_img_pc_url", "news_img_mobile_url", "news_meta_img"];
 - 
 -     public $translatable = ['title', 'written_by', 'description', 'meta_title', 'meta_description', 'meta_keyword'];
 - 
 -     public function newsCategory(){
 -         return $this->belongsTo(NewsCategory::class);
 -     }
 - 
 -     public function paragraphs(){
 -         return $this->hasMany(NewsParagraph::class)->orderBy('order');
 -     }
 - 
 -     public function photos(){
 -         return $this->hasMany(NewsPhoto::class)->orderBy("order");
 -     }
 -     protected function newsImgPcUrl(): Attribute
 -     {
 -         return Attribute::make(
 -             get: fn ($value) => is_null($this->news_img_pc) ? null :Storage::disk('public')->url($this->news_img_pc),
 -         );
 -     }
 -     protected function newsImgMobileUrl(): Attribute
 -     {
 -         return Attribute::make(
 -             get: fn ($value) => is_null($this->news_img_mobile) ? null :Storage::disk('public')->url($this->news_img_mobile),
 -         );
 -     }
 -     protected function newsMetaImg(): Attribute
 -     {
 -         return Attribute::make(
 -             get: fn ($value) => is_null($this->meta_img) ? null :Storage::disk('public')->url($this->meta_img),
 -         );
 -     }
 - 
 -     protected function listAuditState(): Attribute
 -     {
 -         return Attribute::make(
 -             get: fn ($value) => $this->attributes["visible"] == 1 ? "已發佈" : "暫存",
 -         );
 -     }
 -     protected static function booted()
 -     {
 -         static::saving(function ($news) {
 -             // 如果正在將此記錄設為置頂
 -             if ($news->isDirty('on_top') && $news->on_top == 1) {
 -                 // 將其他所有記錄的置頂狀態取消
 -                 static::where('id', '!=', $news->id)
 -                     ->where('news_category_id', $news->news_category_id)
 -                     ->where('on_top', 1)
 -                     ->update(['on_top' => 0]);
 -             }
 -         });
 -     }
 - }
 
 
  |