Лезвие Laravel: метод доступа внутри модели пользователя для авторизованного пользователя - PullRequest
1 голос
/ 20 сентября 2019

Информация об авторизованном пользователе может быть доступна в блейд-серверах с помощью auth()->user()->info.., информация о других пользователях - App\User::where('id' , someid), но как вызвать методы внутри User Model для авторизованного пользователя?

Что я пробовал:

App\User::where('id' , auth()->user()->id)->MyMethod(another-user-instance); //Error: undefined method
App\User::MyMethod(another-user-instance): //Error: Wrong call, Its not static method!
App\User->MyMethod(another-user-instance): //Error: What? Unexpected -> 

У меня есть модель Post, которая подключена к модели User с использованием belongsTo, я могу легко получить доступ к своему методу в User с помощью$AnyPostInstance->BelongToUser->MyMethod(another-user-instance), но я не знаю, как справиться с этим для авторизованного пользователя.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Ну, во-первых, вызывать следующее избыточно:

App\User::where('id' , auth()->user()->id)

Вы получаете доступ к существующему User, через auth()->user(), чтобы получить id и запросить точно такой жеUser.Не делайте этого.

Во-вторых, вам нужно использовать ->first(), если вы звоните App\User:

$user = App\User::first()->myMethod();

Если вы не звоните ->first(), тогдавы получаете доступ к классу Builder, который не имеет функции myMethod().

Итак, способы доступа:

auth()->user()->myMethod();
// This will access the currently logged in User

App\User::first()->myMethod(); 
// This will get the first User from the database

App\User::where("id", "=", $someUserId)->first()->myMethod(); 
// This will return a specific user matching `$someUserId`
1 голос
/ 20 сентября 2019

Вы должны сделать что-то вроде этого:

App\User::where('id' , auth()->user()->id)->first()->MyMethod(another-user-instance);

Строку выше можно заменить на эту:

auth()->user()->myMethod(another-user-instance);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...