php - Laravel 与数据透视表关系中的错误

标签 php mysql laravel many-to-many relational-database

我需要在用户表和订阅表之间建立关系。 注册的用户将获得默认的免费用户并看到 1 个优惠。 如果白银看到 8 个报价,黄金 15 个,白金 20 个。 我使用数据透视表 subscription_user 在用户表和订阅表之间建立了关系。 第一个问题是我是否在与模型相关的某个地方犯了错误? 第二个问题是如何默认只返回 1 个优惠,或者如果您订阅了 8 个优惠(白银)、15 个(黄金)、20 个(白金)以及在哪个 Controller 中?

用户表:

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

一切是否都按照多对多关系应有的方式连接? 我可以在哪个 Controller 中获取有关优惠的信息?

最佳答案

按照惯例,数据透视表被命名为单数,因此您需要通过添加第二个参数来指定。我喜欢包含所有的论点,这样就不用猜测了。

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

}

是的,您应该使用 Controller ,但这取决于您尝试显示它的位置。我想您需要在某处显示当前订阅以及添加和删除。

关于php - Laravel 与数据透视表关系中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54874577/

相关文章:

java - 在 MySQL 中存储转换为字符串字节数组的正确方法?

mysql - 从一个数据库导出表并使用 phpMyAdmin 导入/合并到另一个数据库

mysql - 加入这两个特定的表

javascript - 使用 jQuery 迭代特定的 CSS-id

java - 框架/平台选择?

php - 保护登录 session

php - Laravel:是否可以将 Session 作为依赖项注入(inject)?

laravel - 错误 : Request failed with status code 500 Laravel/Vue

PHP Laravel : How to Access Protected value on array

php - 帮助从 JavaScript if 语句调用 PHP