Laravel morphTo关系

时间:2016-10-02 18:11:00

标签: php eloquent laravel-5.3

我试图让我的订阅数据透视表工作但我一直收到此错误:

Illuminate\Database\QueryException 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` = App\Square\Users\User, `subscription_id` = 1 where `id` = 1)'

所以我有3张桌子:

User
Subscription
Topic

用户可以订阅主题。这就是Subscription表的样子:

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中尝试这个时:

App\Square\Users\User::first()->subscriptions()->save(App\Square\Topics\Topic::first());

我收到错误!我究竟做错了什么? (我需要这个多态表,因为我已经将它用于更多的东西了)

1 个答案:

答案 0 :(得分:0)

在我看来,你需要使用$ table->变形(' subscription');

这将自动为id和type创建两列并强制执行该关系。

我正在寻找一个与变形相关的问题的答案,并偶然发现你的未答复的问题。这是一个非常晚的回应,但希望是一个解决方案。