#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);
}