我需要在用户表和订阅表之间建立关系。 注册的用户将获得默认的免费用户并看到 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/