【问题标题】:How to call a function in one controller to the other controller in laravel如何将一个控制器中的函数调用到laravel中的另一个控制器
【发布时间】:2019-08-27 07:29:30
【问题描述】:

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

调用未定义的方法 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);
} 

【问题讨论】:

  • 您正在调用由$user->where('id', $user->id) 返回的Builder 对象上的函数。你没有在控制器上调用它
  • 那我该怎么办?
  • 这个函数需要做什么?你的函数只是填充一个变量,但什么都不做
  • 我想在配置文件中显示我从这个函数获得的默认存储桶,这就是我称之为@mi的原因
  • 你需要创建一个你的控制器实例$bucketController = new BucketController();然后$bucketController->defaultBuckets();

标签: laravel-5


【解决方案1】:

我认为有错误。你说你的 BucketController

中有这个功能
public function defaultBuckets()
{
  $buckets = Bucket::where('bucket_type', 'default')->get();
}

然后您从 ProfileController

中的 user model 触发该功能
$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');
}

确保在 bucket 模型中接受来自用户的关系,如下所示:

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

您可以根据您的数据库替换列名(bucket_id,user_id)。

如果这能解决您的问题,请告诉我

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2019-04-12
    • 2017-07-22
    相关资源
    最近更新 更多