Вызов неопределенной функции App \ Http \ Controllers \ Categories () в Laravel - PullRequest
0 голосов
/ 03 октября 2019

Пожалуйста, мне нужна помощь, я работаю над проектом в Laravel, я столкнулся с проблемой, когда T пытался использовать сводную таблицу в manay-to-many

В моем category model Category.php,У меня есть функция ниже

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

В моем user model User.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 \ category ()

Когда я изменяю код в моем контроллере на

$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 дней, я не знаю, как решить эту проблему. Мне нужна помощь.

Ответы [ 2 ]

4 голосов
/ 03 октября 2019

Ваша проблема здесь:

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

Вы вызываете метод category () для ... что? ни на что. Я предполагаю, что вы хотите вызвать метод categories() внутри вашей модели User.php. Поэтому попробуйте обновить ваш код следующим образом:

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

Таким образом, вы будете связывать оба объекта.


Примечания

Как я уже говорил, япри условии, что у вас есть categories метод в вашей User модели:

# User.php

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

Помните, что модели должны быть написаны заглавными буквами.

Кроме того, вы могли бы улучшить свой код, получая пользователя напрямую отAuth фасад

Это:

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

является эквивалентом:

$user = Auth::user();
0 голосов
/ 03 октября 2019

Это можно сделать с помощью следующего:

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

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

Здесь вы получаете Category по запросу category_id и присоединяете зарегистрированного пользователя (используя помощник auth() для полученияпользователь id).

...