我需要在用户表和订阅表之间建立关系。 注册的用户将获得默认的免费用户,并看到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');
}
对于多对多关系而言,一切是否都应连接? 我可以在哪个控制器中获取有关报价的信息?
答案 0 :(得分:2)
按照惯例,数据透视表被命名为单数,因此您需要通过添加第二个参数来指定。我喜欢包含所有参数,因此无论如何都不要猜测。
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');
}
是的,您应该使用控制器,但这取决于您试图显示它的位置。我想您将需要在某处显示当前订阅以及添加和删除。