【问题标题】:Call to undefined function App\Http\Controllers\categories() in Laravel在 Laravel 中调用未定义的函数 App\Http\Controllers\categories()
【发布时间】:2020-02-01 23:03:24
【问题描述】:

我需要帮助,我正在 Laravel 做一个项目,当 T 尝试在多对多中使用数据透视表时遇到问题

在我的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')); 
}

这是返回的错误:

调用未定义函数 App\Http\Controllers\categories()

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

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

这是返回的错误:

调用未定义函数 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 天了,我不知道如何解决这个问题。我需要帮助。

【问题讨论】:

  • 发布更多关于控制器的代码。您的示例代码一无所知。
  • @Gasol 请检查我的编辑

标签: php laravel laravel-6


【解决方案1】:

你的问题就在这里:

$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'));
   ^^^^^

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


旁注

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

# User.php

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

记住模型应该大写。

另外,您可以改进代码,直接从 Auth 外观获取用户

这个:

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

相当于:

$user = Auth::user();

【讨论】:

  • @thisiskelvin :)
  • 我这样做了,但它返回了 **SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: 'on' for column 'category_id' at row 1 (SQL: insert into category_user` (category_id, created_at, updated_at, user_id) 值(on, 2019-10-03 15: 52:32, 2019-10-03 15:52:32, 1))** So I added timestamps to my model return $this->belongsToMany(Category::class)->withTimestamps();` 但还是一样
  • 谢谢,我的表单有问题。它现在正在工作。
  • @xtremeCODE 很高兴为您提供帮助。
【解决方案2】:

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

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

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

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

【讨论】:

  • 返回错误调用成员函数 users() on null
  • category_id是否被传递?检查使用dd(request('category_id'))
  • 我返回 404:未找到
  • 如果正确传递,错误应该返回 null 或类别 id
  • 它返回了 null
猜你喜欢
  • 2020-01-10
  • 1970-01-01
  • 2017-10-16
  • 2018-10-16
  • 1970-01-01
  • 2020-12-05
  • 2018-02-02
  • 2022-11-15
  • 2018-08-24
相关资源
最近更新 更多