Laravel morphTo отношение

Я пытаюсь заставить свою сводную таблицу подписки работать, но я продолжаю получать эту ошибку:

IlluminateDatabaseQueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'subscription_type' in 'field list' (SQL: update `topic` set `updated_at` = 2016-10-02 18:06:49, `subscription_type` = AppSquareUsersUser, `subscription_id` = 1 where `id` = 1)'

Так что у меня есть 3 таблицы:

User
Subscription
Topic

Пользователь может подписаться на тему. Вот как выглядит таблица подписки:

Schema::create('subscription', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id')->index();
    $table->integer('subscription_id');
    $table->string('subscription_type');
    $table->timestamps();

    $table->unique(['user_id', 'subscription_id', 'subscription_type']);
});

Мое отношение в Userмодели:

public function subscriptions()
{
    return $this->morphMany(Subscription::class, 'subscription');
}

Поэтому, когда я пробую это в php artisan tinker:

AppSquareUsersUser::first()->subscriptions()->save(AppSquareTopicsTopic::first());

Я получаю ошибку! Что я делаю не так? (Мне нужна эта полиморфная таблица, потому что я должен использовать ее для некоторых других вещей)

1 ответ

  1. Мне кажется, что вам нужно использовать $table — >morphs (‘subscription’);

    Это создаст два столбца для id и введите автоматически и принудительно отношения.

    Я искал ответ на вопрос, связанный с морфами, и наткнулся на ваш ответ. Это действительно запоздалый ответ, но, надеюсь, решение.