Как по мне лучший вариант сначала доставать юзера, а потом уже его использовать в скоупах и т.д.
Вместо того чтобы кидать в скоупы рандомную строку и пускай сам разбирается что с этим делать.
Сильно лучше никак не запилить, разве что whereHas приделать для большей читабельности.
И тогда н енадо будет заранее доставать юзера и лишнего запроса не будет в принципе делаться, хотя сам запрос с whereHas будет потяжелее.
И такая байда из класса в класс
Это лечится трейтом чтобы избежать дублирования кода.
В чем первоначальная проблема так и не понял.
В том что нужно как-то забиндить удобно или чтобы не делать в каждой модели scopeUser().
Так-то вообще можно придумать какой-то резольвер для биндов моделей, но судя по всему это как из пушки по воробьям.