Как вызвать функцию из одного контроллера в другой контроллер в laravel - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу вызвать функцию в другом контроллере.когда я вызываю это, я получаю ошибку.

вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: defaultBuckets ()

Я не знаю, почему это дает мнеэта ошибка.Я не знаю, правильно ли я вызываю эту функцию в другом контроллере.Вот мой кодПожалуйста, помогите.

Вот моя функция, которую я создал в моем BucketController:

public function defaultBuckets()
{
    $buckets = Bucket::where('bucket_type', 'default')->get();
}

А вот моя функция контроллера профиля Где я вызываю эту функцию:

public function show(User $user)
{
    $authUser = JWTAuth::parseToken()->toUser();

    if (! $user->isBlocking($authUser) && ! $user->isBlockedBy($authUser)) {
        if($authUser->id == $user->id){

           $profile = $user->where('id', $user->id)->defaultBuckets()->with([
            'posts', 'likes', 'followers', 'following'])->first(); 
        } else{

        $profile = $user->where('id', $user->id)->with([
            'posts' => function ($query) {
                $query->where('post_type', 'public');
            },
            'buckets' => function ($query) {
                $query->where('bucket_type', 'public');
            },
            'likes' => function ($query) {
                $query->where('post_type', 'public');
            },
            'followers', 'following'])->first();
        }
    return response()->json(['profile'=> $profile], 200);
    }

    return response()->json(['message'=> 'Your are not able to open profile of this user'], 200);
} 

1 Ответ

1 голос
/ 05 апреля 2019

Я думаю, что есть ошибка.Вы сказали, что у вас есть эта функция в вашем BucketController

public function defaultBuckets()
{
  $buckets = Bucket::where('bucket_type', 'default')->get();
}

, а затем вы запускаете функцию из пользовательской модели в вашем ProfileController

$profile = $user->where('id', $user->id)->defaultBuckets()->with([
        'posts', 'likes', 'followers', 'following'])->first(); 

По этой причине в нем говорится, что нет функции с именем "defaultBuckets".

Вы должны поместить эту функцию в вашу Модель пользователя , и все будет работатьхорошо.

Также не забудьте вернуть ведра так же, как это:

Чтобы вернуть все ведра

public function defaultBuckets()
{
  $buckets = Bucket::where('bucket_type', 'default')->get();
  return $buckets; // all buckets
}

Чтобы вернуть только пользовательские корзины

public function defaultBuckets()
{
  return $this->hasMany(Bucket::class)->where('bucket_type', 'default');
}

Обязательно примите отношения от пользователя в модель ковша , например:

public function user(){
 return $this->hasOne(User::class, 'bucket_id' , 'user_id');
}

Вы можете заменитьимена столбцов (bucket_id, user_id) в соответствии с вашей базой данных.

Дайте мне знать, если это решит вашу проблему

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