|null $notes * @property int $manually_added * @property string|null $base_domain * @property int|null $ban_subdomains * @property string|null $ip_address * @property int $list_limitation * @property int|null $valid_nodeinfo * @property Carbon|null $nodeinfo_last_fetched * @property int $delivery_timeout * @property Carbon|null $delivery_next_after * @property string|null $shared_inbox * @property int|null $allowlisted * @property int $delivery_failures * @property-read Collection $media * @property-read int|null $media_count * @property-read Collection $profiles * @property-read int|null $profiles_count * @property-read Collection $reported * @property-read int|null $reported_count * @property-read Collection $reports * @property-read int|null $reports_count * @property-read Collection $statuses * @property-read int|null $statuses_count * * @method static \Illuminate\Database\Eloquent\Builder|Instance moderated() * @method static \Illuminate\Database\Eloquent\Builder|Instance newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Instance newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Instance query() * @method static \Illuminate\Database\Eloquent\Builder|Instance whereActiveDeliver($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereActorsLastSyncedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereAdminUrl($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereAllowlisted($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereAutoCw($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereBanSubdomains($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereBanned($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereBaseDomain($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereDeliveryFailures($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereDeliveryNextAfter($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereDeliveryTimeout($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereDomain($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereIpAddress($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereLastCrawledAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereLimitReason($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereListLimitation($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereManuallyAdded($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereNodeinfoLastFetched($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereNotes($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereSharedInbox($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereSoftware($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereStatusCount($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereUnlisted($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereUrl($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereUserCount($value) * @method static \Illuminate\Database\Eloquent\Builder|Instance whereValidNodeinfo($value) * * @mixin \Eloquent */ class Instance extends Model { protected $guarded = []; protected function casts(): array { return [ 'last_crawled_at' => 'datetime', 'actors_last_synced_at' => 'datetime', 'notes' => 'array', 'nodeinfo_last_fetched' => 'datetime', 'delivery_next_after' => 'datetime', ]; } // To get all moderated instances, we need to search where (banned OR unlisted) public function scopeModerated($query): void { $query->where(function ($query) { $query->where('banned', true)->orWhere('unlisted', true); }); } public function profiles() { return $this->hasMany(Profile::class, 'domain', 'domain'); } public function statuses() { return $this->hasManyThrough( Status::class, Profile::class, 'domain', 'profile_id', 'domain', 'id' ); } public function reported() { return $this->hasManyThrough( Report::class, Profile::class, 'domain', 'reported_profile_id', 'domain', 'id' ); } public function reports() { return $this->hasManyThrough( Report::class, Profile::class, 'domain', 'profile_id', 'domain', 'id' ); } public function media() { return $this->hasManyThrough( Media::class, Profile::class, 'domain', 'profile_id', 'domain', 'id' ); } public function getUrl() { return url("/i/admin/instances/show/{$this->id}"); } }