#laravel-5
#laravel-5
Вопрос:
Я хочу вызвать функцию в другом контроллере. когда я вызываю это, выдает ошибку.
Вызов неопределенного метода IlluminateDatabaseQuery 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) amp;amp; ! $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. Вы вызываете функцию для
Builder
объекта, возвращаемого$user->where('id', $user->id)
. вы не вызываете ее на контроллере2. Итак, как я могу сделать?
3. Что должна делать функция? ваша функция просто заполняет переменную, но ничего с ней не делает
4. Я хочу показать сегменты по умолчанию, которые я получаю от этой функции в профиле, вот почему я называю это @mi
5. Вам нужно создать экземпляр вашего контроллера
$bucketController = new BucketController();
, а затем$bucketController->defaultBuckets();
Ответ №1:
Я думаю, что это ошибка. Вы сказали, что у вас есть эта функция в вашем BucketController
public function defaultBuckets()
{
$buckets = Bucket::where('bucket_type', 'default')->get();
}
и затем вы запускаете функцию из user model в вашем 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) в соответствии с вашей базой данных.
Дайте мне знать, если это устранит вашу проблему