$validated) * @method static findMany(mixed $channel_ids) * @property integer $id * @property integer $platform_instance_id * @property PlatformInstance $platformInstance * @property integer $channel_id * @property string $name * @property int $language_id * @property Language|null $language * @property boolean $is_active */ class PlatformChannel extends Model { /** @use HasFactory */ use HasFactory; protected $table = 'platform_channels'; protected $fillable = [ 'platform_instance_id', 'name', 'display_name', 'channel_id', 'description', 'language_id', 'is_active' ]; protected $casts = [ 'is_active' => 'boolean' ]; /** * @return BelongsTo */ public function platformInstance(): BelongsTo { return $this->belongsTo(PlatformInstance::class); } /** * @return BelongsToMany */ public function platformAccounts(): BelongsToMany { return $this->belongsToMany(PlatformAccount::class, 'platform_account_channels') ->withPivot(['is_active', 'priority']) ->withTimestamps(); } /** * @return BelongsToMany */ public function activePlatformAccounts(): BelongsToMany { return $this->platformAccounts()->where('is_active', true); } public function getFullNameAttribute(): string { // For Lemmy, use /c/ prefix return $this->platformInstance->url . '/c/' . $this->name; } /** * @return BelongsToMany */ public function feeds(): BelongsToMany { return $this->belongsToMany(Feed::class, 'routes') ->using(Route::class) ->withPivot(['is_active', 'priority', 'filters']) ->withTimestamps(); } /** * @return BelongsToMany */ public function activeFeeds(): BelongsToMany { return $this->feeds() ->wherePivot('is_active', true) ->orderByPivot('priority', 'desc'); } /** * @return BelongsTo */ public function language(): BelongsTo { return $this->belongsTo(Language::class); } }