Laravel 8: базовая таблица или представление не найдены

У меня есть две таблицы в db, одна из них называется users, которая просто содержит информацию о пользователе веб-сайта, а другая - tags, которая содержит некоторые хэштеги, которые пользователи могут выбирать из них.

Я также создал таблицу с именем tag_user, в которой могут храниться tag_id и user_id, как это изображение:

введите описание изображения здесь

(точно так же, как Stackoverflow, пользователь может выбрать несколько тегов, таких как php, javascript и т. д.)

Итак, чтобы установить связь между этими двумя, я добавил это в модель User:

public function tags()
    {
        return $this->belongsToMany(User::class);
    }

А также это для модели Tag:

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

А вот опция выбора на блейд-сервере, и пользователи могут выбрать несколько тегов из базы данных:

<select class="form-control BSinaBold" name="skills[]" id="skills" multiple>
    @foreach(\App\Models\Tag::all() as $tag)
        <option value="{{ $tag->id }}" {{ in_array($tag->id , Auth::user()->tags->pluck('id')->toArray()) ? 'selected' : '' }}>{{ $tag->name }}</option>
    @endforeach
</select>

Теперь, как только я загружаю лезвие, я получаю это как ошибку:

SQLSTATE [42S02]: базовая таблица или представление не найдены: 1146 Таблица 'dbname.user_user' не существует (SQL: выберите _11 _. *, _12 _._ 13_ как pivot_user_id из users внутреннего соединения user_user на _17 _._ 18_ = user_user .user_id, где _21 _._ 22_ = 4)

Так что здесь не так? Как я могу исправить эту проблему?

Я был бы очень признателен за любую идею или предложение от вас, ребята ...

А вот и миграция таблицы tags & tag_user:

public function up()
    {
        Schema::create('tags', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('label');
            $table->timestamps();
        });

        Schema::create('tag_user', function (Blueprint $table) {
            $table->unsignedBigInteger('tag_id');
            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->primary(['tag_id','user_id']);
        });
    }

Заранее спасибо.


person tejoslaeslio    schedule 26.02.2021    source источник
comment
Вам нужно поменять имена классов в hasMany. Прямо сейчас в User теги говорят, что для каждого пользователя есть несколько пользователей, а теги говорят, что для каждого тега есть несколько тегов. Объект hasMany должен ссылаться на класс, которого у него много.   -  person aynber    schedule 26.02.2021


Ответы (1)


Как описал @aynber в комментариях:

В модели User

public function tags()
{
    return $this->belongsToMany(Tag::class);
}

А в Tag модели

public function users()
{
    return $this->belongsToMany(User::class);
}
person Jerry555555    schedule 26.02.2021