mysql - Laravel数据库结构 'apply'

标签 mysql database laravel eloquent

所以我有一个奇怪的问题。 我正在 Laravel 和 Angular 中制作应用程序。我正在使用 Eloquent 模型。 现在我有 2 个表,1 个用户表(包含用户信息)和 1 个事件表(包含事件的名称、日期等)。

这 2 个事件通过 oneToMany 关系绑定(bind)(每个事件都属于一个用户)。但现在我希望人们报名参加那个事件。 (前端有一个开关,这样他们就可以申请该事件)。

所以,很多用户会有很多事件。 问题还在于,事件的所有者可以手动设置最大用户数。 (这是我的事件表中的一个tinyINt)。

现在是我的问题了。我怎样才能做到这一点?

我想到的选项: 1.我制作了一个数据透视表 -> 这可能吗?因为用户和事件已经通过一对多关系绑定(bind)了?那么我怎样才能再次将它们与多对多关系绑定(bind)呢? 2. 每次用户签署操作时,我都会将他的 ID 添加到事件表中的数组中。 -> 这可能吗?然后我可以通过检查数组的长度来设置最大用户数?

谢谢 friend 们!

最佳答案

使用数据透视表是此处的正确方法。两个表已经由不同的关系绑定(bind)这一事实不应阻止您。

class Events extends Eloquent
{
    public function owner()
    {
        return $this->belongsTo(App\User::class);
    }

    public function subscribers()
    {
        return $this->belongsToMany(App\User::class, 'event_user');
    }

    public function canAddSubscriber()
    {
        if ( ! $this->max_users) return true;

        return $this->max_users < $this->subscribers()->count();
    }
}

如您所见,您可以使用该关系来确定是否仍可以添加订阅者。

关于mysql - Laravel数据库结构 'apply',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32167798/

相关文章:

java.sql.SQLException : Incorrect string value: '\xF0\x9F\x91\xBD\xF0\x9F...'

java - 关系数据库模式是否必须规范化为第三范式才能使其成为 ORM 可映射的?

php - Laravel 如何使用 Eloquent 连接表并使用 where 条件?

php - Laravel 在队列中调度纯 json

php - 如何使用sqlyog将数据从表a(数据库a)移动到表b(数据库b)?

mysql - SQL 查询在 Web 托管上执行时出现错误,但在 localhost 上运行时没有问题

sql - 如何根据 r 中的另一个键/ID 列将列切换为行?

mysql - 在一个表中定义多个多对多关系

MySql 不同的问题 : Error Code: 1242 Subquery returns more than 1 row

php - 在 Laravel 上处理模型的全局事件