Ошибка в отношениях с сводной таблицей Laravel - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно установить связь между пользователем и таблицей подписки.Пользователь, который регистрируется, получает бесплатного пользователя по умолчанию и видит 1 предложение.Если серебро видит 8 предложений, золото 15, платину 20. Я установил связь между таблицами пользователей и подписок с помощью сводной таблицы subscription_user.Первый вопрос: допустил ли я где-то ошибку в отношении модели?Второй вопрос: как вернуть только одно предложение по умолчанию или если вы подписаны на 8 предложений (серебро), 15 (золото), 20 (платина) и в каком контроллере?

Таблица пользователей:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->string('subscription')->default('free');
    $table->rememberToken();
    $table->timestamps();
});

Таблица подписки:

   Schema::create('subscriptions', function (Blueprint $table) {
        $table->increments('id');
        $table->string('subscription');
        $table->integer('offers');
        $table->timestamps();
    });

Таблица Sabscription_user:

 Schema::create('subscription_users', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned()->index(); //user table
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); //foreign key relation
        $table->integer('subscription_id')->unsigned()->index();
        $table->foreign('subscription_id')->references('id')->on('subscriptions')->onDelete('cascade'); //foreign key relation
    });

Модель подписки:

class Subscription extends Model
{
    public function users() {
        return $this->belongsToMany('App\User');
    }
}

Модель пользователя:

public function subscriptions(){
    return $this->belongsToMany('App\Subscription');
}

Все ли связано, как это должно быть для многих со многими?В каком контроллере я могу получить информацию о предложениях?

1 Ответ

0 голосов
/ 26 февраля 2019

По соглашению сводная таблица называется сингулярной, поэтому вам нужно будет указать ее, добавив второй аргумент.Мне нравится включать все аргументы, так что в любом случае нет никаких догадок.

public function subscriptions()
{
    return $this->belongsToMany("App\Subscription", 'subscription_users', 'user_id', 'subscription_id', 'id',  'id');

}

public function users()
{
    return $this->belongsToMany("App\User", 'subscription_users', 'subscription_id', 'user_id', 'id',  'id');

}

Да, вы должны использовать контроллер, но это зависит от того, где вы пытаетесь отобразить это.Я полагаю, вам нужно будет где-то отображать текущие подписки, а также добавлять и удалять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...