如何在一个控制器中调用函数到laravel中的另一个控制器

时间:2019-04-05 11:43:18

标签: laravel-5

我想在另一个控制器中调用一个函数。当我打电话给我时出现错误。

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: defaultBuckets()

我不知道为什么它会给我这个错误。我不知道我是在另一个控制器中正确调用此函数。这是我的代码。请帮忙。

这是我在BucketController中创建的函数:

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

这是我的Profile Controller函数,我在其中调用此函数:

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 个答案:

答案 0 :(得分:1)

我认为这是错误的。您说您在 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)。

让我知道这是否可以解决您的问题