我想在另一个控制器中调用一个函数。当我打电话给我时出现错误。
调用未定义的方法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);
}
答案 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)。
让我知道这是否可以解决您的问题