xtr*_*ODE 0 php laravel laravel-6
请我需要帮助,我正在 Laravel 中进行一个项目,当 T 尝试在多对多中使用数据透视表时遇到问题
在我的category model Category.php,我有下面的功能
public function users()
{
return $this->belongsToMany(user::class);
}
Run Code Online (Sandbox Code Playgroud)
在我的user model User.php,我有下面的功能
public function authors()
{
return $this->belongsToMany(author::class);
}
Run Code Online (Sandbox Code Playgroud)
在web.php,我有这个
Route::post('/onboarding', 'OnboardsController@categoryUser');
Run Code Online (Sandbox Code Playgroud)
在 my 中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>
Run Code Online (Sandbox Code Playgroud)
在我的 OnboardsController
我有这个
public function categoryUser (Request $request)
{
$user = User::findOrFail(Auth::user()->id);
$user = categories()->attach($request->input('category_id'));
return redirect ( route ('onboarding_author'));
}
Run Code Online (Sandbox Code Playgroud)
这是返回的错误:
调用未定义的函数 App\Http\Controllers\categories()
当我将控制器中的代码更改为
$category = Category::find($request->input('category_id'));
$user = User::where('user_id', Auth::id());
$category->users()->attach($user->id);
Run Code Online (Sandbox Code Playgroud)
这是返回的错误:
调用未定义的函数 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'));
}
Run Code Online (Sandbox Code Playgroud)
请我是 Laravel 的新手,我已经用了 3 天了,我不知道如何解决这个问题。我需要帮助。
你的问题就在这里:
$user = User::findOrFail( Auth::user()->id );
$user = categories()->attach($request->input('category_id'));
^^^^^^
Run Code Online (Sandbox Code Playgroud)
你正在调用一个方法 category() ......什么?无所事事。我假设您想categories()在User.php模型中调用该方法。所以尝试像这样更新你的代码:
$user = User::findOrFail( Auth::user()->id );
$user->categories()->attach($request->input('category_id'));
^^^^^
Run Code Online (Sandbox Code Playgroud)
这样,您将关联两个对象。
正如我所提到的,我假设categories您的User模型中有该方法:
# User.php
public function categories()
{
return $this->belongsToMany(Category::class);
}
Run Code Online (Sandbox Code Playgroud)
请记住,模型应该大写。
此外,您可以改进直接从 Auth 外观获取用户的代码
这个:
$user = User::findOrFail(Auth::user()->id);
Run Code Online (Sandbox Code Playgroud)
是等价物:
$user = Auth::user();
Run Code Online (Sandbox Code Playgroud)