fix: add return type declarations to Eloquent relation methods

Larastan 3.x requires explicit return types on relation methods to
verify relation existence when using with(), has(), etc. This adds
the appropriate return type declarations to all relation methods
flagged by the larastan.relationExistence rule.

Models fixed:
- Profile (avatar, statuses)
- User (profile)
- Status (profile, media, hashtags)
- DirectMessage (status, author, recipient)
- Report (reporter, status, reportedUser)
- Like (actor, status)
- Media (status)
- Notification (item)
- HashtagFollow (hashtag)
- OauthClient (user)
- Story (profile)
- StatusHashtag (status, hashtag, profile, media)
- AccountInterstitial (user)
- Hashtag (posts)
- CustomFilter (keywords)
- CustomFilterKeyword (customFilter)
- AdminShadowFilter (profile)
- ImportPost (status)
pull/6850/head
Your Name 4 weeks ago
parent baa7774378
commit f2159197e8

@ -3,6 +3,7 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class AccountInterstitial extends Model
{
@ -16,14 +17,14 @@ class AccountInterstitial extends Model
];
}
public function user()
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function status()
{
if ($this->item_type != \App\Status::class) {
if ($this->item_type != Status::class) {
return;
}

@ -3,11 +3,12 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Facades\Auth;
class DirectMessage extends Model
{
public function status()
public function status(): BelongsTo
{
return $this->belongsTo(Status::class, 'status_id', 'id');
}
@ -17,12 +18,12 @@ class DirectMessage extends Model
return config('app.url').'/account/direct/m/'.$this->status_id;
}
public function author()
public function author(): BelongsTo
{
return $this->belongsTo(Profile::class, 'from_id', 'id');
}
public function recipient()
public function recipient(): BelongsTo
{
return $this->belongsTo(Profile::class, 'to_id', 'id');
}

@ -3,12 +3,13 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
class Hashtag extends Model
{
public $fillable = ['name', 'slug'];
public function posts()
public function posts(): HasManyThrough
{
return $this->hasManyThrough(
Status::class,

@ -3,6 +3,7 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class HashtagFollow extends Model
{
@ -14,7 +15,7 @@ class HashtagFollow extends Model
const MAX_LIMIT = 25;
public function hashtag()
public function hashtag(): BelongsTo
{
return $this->belongsTo(Hashtag::class);
}

@ -3,6 +3,7 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class Like extends Model
@ -20,12 +21,12 @@ class Like extends Model
];
}
public function actor()
public function actor(): BelongsTo
{
return $this->belongsTo(Profile::class, 'profile_id', 'id');
}
public function status()
public function status(): BelongsTo
{
return $this->belongsTo(Status::class);
}

@ -4,6 +4,7 @@ namespace App;
use App\Util\Media\License;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
@ -23,7 +24,7 @@ class Media extends Model
];
}
public function status()
public function status(): BelongsTo
{
return $this->belongsTo(Status::class);
}

@ -6,6 +6,7 @@ use App\Profile;
use App\Services\AccountService;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class AdminShadowFilter extends Model
{
@ -22,13 +23,13 @@ class AdminShadowFilter extends Model
public function account()
{
if ($this->item_type === \App\Profile::class) {
if ($this->item_type === Profile::class) {
return AccountService::get($this->item_id, true);
}
}
public function profile()
public function profile(): BelongsTo
{
return $this->belongsTo(Profile::class, 'item_id');
}

@ -4,6 +4,7 @@ namespace App\Models;
use App\Profile;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
@ -71,7 +72,7 @@ class CustomFilter extends Model
return $this->belongsTo(Profile::class, 'profile_id');
}
public function keywords()
public function keywords(): HasMany
{
return $this->hasMany(CustomFilterKeyword::class);
}

@ -3,6 +3,7 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class CustomFilterKeyword extends Model
{
@ -17,7 +18,7 @@ class CustomFilterKeyword extends Model
];
}
public function customFilter()
public function customFilter(): BelongsTo
{
return $this->belongsTo(CustomFilter::class);
}

@ -5,6 +5,7 @@ namespace App\Models;
use App\Status;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class ImportPost extends Model
{
@ -19,7 +20,7 @@ class ImportPost extends Model
];
}
public function status()
public function status(): HasOne
{
return $this->hasOne(Status::class, 'id', 'status_id');
}

@ -3,6 +3,7 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class Notification extends Model
@ -28,7 +29,7 @@ class Notification extends Model
return $this->belongsTo(Profile::class, 'profile_id', 'id');
}
public function item()
public function item(): MorphTo
{
return $this->morphTo();
}

@ -3,12 +3,13 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class OauthClient extends Model
{
protected $table = 'oauth_clients';
public function user()
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}

@ -6,6 +6,8 @@ use App\Models\ProfileAlias;
use App\Services\FollowerService;
use App\Util\Lexer\PrettyNumber;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Cache;
@ -88,7 +90,7 @@ class Profile extends Model
return $this->username.'@'.$domain;
}
public function statuses()
public function statuses(): HasMany
{
return $this->hasMany(Status::class);
}
@ -179,7 +181,7 @@ class Profile extends Model
return $this->hasMany(Like::class);
}
public function avatar()
public function avatar(): HasOne
{
return $this->hasOne(Avatar::class)->withDefault([
'media_path' => 'public/avatars/default.jpg',

@ -3,6 +3,7 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Report extends Model
{
@ -20,7 +21,7 @@ class Report extends Model
return url('/i/admin/reports/show/'.$this->id);
}
public function reporter()
public function reporter(): BelongsTo
{
return $this->belongsTo(Profile::class, 'profile_id');
}
@ -30,12 +31,12 @@ class Report extends Model
$class = $this->object_type;
switch ($class) {
case \App\Status::class:
case Status::class:
$column = 'id';
break;
default:
$class = \App\Status::class;
$class = Status::class;
$column = 'id';
break;
}
@ -43,12 +44,12 @@ class Report extends Model
return (new $class)->where($column, $this->object_id)->first();
}
public function status()
public function status(): BelongsTo
{
return $this->belongsTo(Status::class, 'object_id');
}
public function reportedUser()
public function reportedUser(): BelongsTo
{
return $this->belongsTo(Profile::class, 'reported_profile_id', 'id');
}

@ -10,6 +10,9 @@ use App\Services\AccountService;
use App\Services\StatusService;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
@ -85,12 +88,12 @@ class Status extends Model
const MAX_LINKS = 5;
public function profile()
public function profile(): BelongsTo
{
return $this->belongsTo(Profile::class);
}
public function media()
public function media(): HasMany
{
return $this->hasMany(Media::class);
}
@ -283,7 +286,7 @@ class Status extends Model
return $this->hasOne(Conversation::class);
}
public function hashtags()
public function hashtags(): HasManyThrough
{
return $this->hasManyThrough(
Hashtag::class,

@ -3,6 +3,8 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
class StatusHashtag extends Model
{
@ -13,22 +15,22 @@ class StatusHashtag extends Model
'status_visibility',
];
public function status()
public function status(): BelongsTo
{
return $this->belongsTo(Status::class);
}
public function hashtag()
public function hashtag(): BelongsTo
{
return $this->belongsTo(Hashtag::class);
}
public function profile()
public function profile(): BelongsTo
{
return $this->belongsTo(Profile::class);
}
public function media()
public function media(): HasManyThrough
{
return $this->hasManyThrough(
Media::class,

@ -4,6 +4,7 @@ namespace App;
use App\Util\Lexer\Bearcap;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
@ -48,7 +49,7 @@ class Story extends Model
];
}
public function profile()
public function profile(): BelongsTo
{
return $this->belongsTo(Profile::class);
}

@ -5,6 +5,7 @@ namespace App;
use App\Services\AvatarService;
use App\Util\RateLimit\User as UserRateLimit;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
@ -65,7 +66,7 @@ class User extends Authenticatable implements OAuthenticatable
'updated_at',
];
public function profile()
public function profile(): HasOne
{
return $this->hasOne(Profile::class);
}

Loading…
Cancel
Save