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

#php #laravel #migration #laravel-8

#php #laravel #миграция #laravel-8

Вопрос:

У меня есть две таблицы в БД, одна из них называется 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(AppModelsTag::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: select users .*, user_user . user_id as pivot_user_id из users inner join user_user on users . id = user_user . user_id where user_user . user_id = 4)

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

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

И здесь также выполняется миграция tags amp; tag_user table:

 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']);
        });
    }
 

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

Комментарии:

1. Вам нужно поменять имена классов в hasMany. Прямо сейчас, в User, tags говорит, что для каждого пользователя есть несколько пользователей, а Tags говорит, что для каждого тега есть несколько тегов. hasMany должен ссылаться на класс, которого у него много.

Ответ №1:

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

В User модели

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

И в Tag модели

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