В ларе есть встроенный route binding
Но есть ли такой же для обычных инжектов?
Есть пользователь, которого можно найти либо по айдишнику, либо по никнейму
В роуте это реализовано так:
Route::bind('user', static function ($value) {
return Uuid::isValid($value)
? User::whereId($value)->firstOrFail()
: User::whereNickname($value)->firstOrFail();
});
Есть другие модули, в которых участвует пользователь
Так вот, для этих моделей есть скоупы:
public function scopeUser(Builder $query, $value): Builder
{
return $query->where(
'user_id',
'=',
Uuid::isValid($value) ? $value : User::whereNickname($value)->firstOrFail()->getKey()
);
}
И такая байда из класса в класс
Можно было бы сделать так:
public function scopeUser(Builder $query, User $user): Builder
{
return $query->where('user_id', '=', $user->getKey());
}
Но тут проблема в том что это либо никнейм либо айдишник. Можно ли как то где то прописать эти байнды как и для роутера это реализовано?