在 Laravel 中调用未定义的函数 App\Http\Controllers\categories()

Call to undefined function App\Http\Controllers\categories() in Laravel

我需要帮助,我正在 Laravel 中进行一个项目,当 T 尝试在多对多

中使用枢轴 table 时遇到问题

在我的category modelCategory.php中,我有下面的函数

public function users()
{
    return $this->belongsToMany(user::class);
}

在我的user modelUser.php中,我有下面的函数

public function authors()
{
    return $this->belongsToMany(author::class);
}

web.php,我有这个

Route::post('/onboarding', 'OnboardsController@categoryUser');

在我的 onboarding view 中,我有一个表格:

   <form action="{{ url('/onboarding') }}" method="POST">
    @csrf
      @foreach($categories as $category)
        <div class="radio-item">
        <input class="form control" name="category_id" type="checkbox" id="category_id" required>
          <label for="name">{{ $category -> title }}</label>
        </div>
        @endforeach

        <div class="form-row">
          <div class="form-group col-md-12 text-center">
            <button type="submit">Proceed to Authors</button>
          </div>
        </div>
      </form>

在我的OnboardsController

我有这个

public function categoryUser (Request $request)
{
  $user = User::findOrFail(Auth::user()->id);
  $user = categories()->attach($request->input('category_id'));

  return redirect ( route ('onboarding_author')); 
}

这是返回的错误:

Call to undefined function App\Http\Controllers\categories()

当我将控制器中的代码更改为

$category = Category::find($request->input('category_id'));
$user = User::where('user_id', Auth::id());
$category->users()->attach($user->id);

这是返回的错误:

Call to undefined function App\Http\Controllers\users()

这是我的完整 OnboardsController.php 代码

<?php

namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Author;
use App\User;
use App\Category;


class OnboardsController extends Controller
{
public function index()
        {
    //
    return view('onboarding')
    ->with('categories', Category::all());

}

public function author()
{
//
return view('onboarding_author')
->with('authors', Author::all());

}

public function categoryUser (Request $request)
{

    dd(request('category_id'));
    Category::findOrFail(request('category_id'))
    ->users()
    ->attach(auth()->user()->id);

    return redirect ( route ('onboarding_author')); 
}

拜托,我是 Laravel 的新手,我已经用了 3 天了,我不知道如何解决这个问题。我需要帮助。

您的问题就在这里:

$user = User::findOrFail( Auth::user()->id );
$user = categories()->attach($request->input('category_id'));
   ^^^^^^

您正在...调用方法 categories() 什么?什么都没有。我假设您想在 User.php 模型中调用 categories() 方法。所以尝试像这样更新您的代码:

$user = User::findOrFail( Auth::user()->id );
$user->categories()->attach($request->input('category_id'));
   ^^^^^

这样,您将关联两个对象。


旁注

正如我提到的,我假设您的 User 模型中有 categories 方法:

# User.php

public function categories()
{
    return $this->belongsToMany(Category::class);
}

记住模型应该大写。

此外,您可以改进直接从 Auth facade 获取用户的代码

这个:

$user = User::findOrFail(Auth::user()->id);

相当于:

$user = Auth::user();

您可以通过以下方式实现:

public function categoryUser()
{
    Category::findOrFail(request('category_id'))
        ->users()
        ->attach(auth()->user()->id);

    return redirect(route('onboarding_author')); 
}

在这里,您通过请求的 category_id 获取 Category,并附加登录用户(使用 auth() 帮助程序获取用户的 id)。