【问题标题】:Laravel DB and Eloquent designLaravel DB 和 Eloquent 设计
【发布时间】:2014-10-07 09:58:51
【问题描述】:

我从头到尾阅读了 Eloquent 文档,并浏览了许多不同的教程(包括几个小时的 nettuts)。我有一些与 Eloquent 模型相关的基本数据库设计问题。如果有人可以帮助我理解,我会很高兴。

所以这个数据库有用户、合作伙伴和事件

Users
---------
id
userName
firstName
lastName

Partners
---------
id
user_id
firstName
lastName

Events
---------
id
user_id
partner_id
description

所以对于这个问题来说,这是一个非常基本的布局。显然,每个表中都会放置额外的字段来提供更多信息(包括时间戳等)。

每个用户可以有多个合作伙伴 每个合作伙伴只有一个用户 每个合作伙伴都有很多活动

有了这个基本布局,我需要知道我是否走在正确的轨道上,尤其是事件表。有时我需要查看与用户关联的所有最近事件,并从合作伙伴表中提取数据(如他们的名字和姓氏)。

所以这是我的关系理解..

用户有很多合作伙伴

合作伙伴有很多活动

事件 belongsTo User & belongsTo Partner

此设置是否允许我进行简单的有说服力的通话?

以下是我理解的模型:

用户

class Users extends Eloquent {

protected $table = 'Users';
public $timestamps = true;

public function Partners()
{
    return $this->hasMany('Partners', 'user_id');
}

public function Events()
{
    return $this->hasManyThrough('Events', 'Partners');
}

}

合作伙伴

class Partners extends Eloquent {

protected $table = 'Partners';
public $timestamps = true;

public function Partners()
{
    return $this->belongsTo('Users', 'id');
}

public function Events()
{
    return $this->hasMany('Events', 'id');
}

}

活动

class Events extends Eloquent {

protected $table = 'Events';
public $timestamps = true;

public function Users()
{
    return $this->belongsTo('Users', 'id');
}

public function Partners()
{
    return $this->belongsTo('Partners', 'id');
}

}

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    根据您的需要,您可以设置与您的架构的任何/所有这些关系:

    (所有简化以保持简短,但显然它们都是返回关系的方法。另外我包括外键,因为你的例子是错误的,你把 id 作为第二个参数,我鼓励使用单数名称模型)

    // User model
    
    partners { hasMany('Partner', 'user_id') }
    
    // events through partners table and partner_id foreign key
    partnersEvents { hasManyThrough('Event', 'Partner') }
    
    // events by user_id foreign key
    events { hasManyThrough('Event', 'Partner') }
    
    // many to many with events being pivot table
    partnersThroughPivot { belongsToMany('Partner', 'events') }
    

    // Partner model
    
    user { belongsTo('User', 'user_id') }
    
    // events through partners table and partner_id foreign key
    events { hasMany('Event', 'partner_id') }
    
    // many to many with events being pivot table
    usersThroughPivot { belongsToMany('User', 'events') }
    

    // Event model
    
    user { belongsTo('User', 'user_id') }
    
    partner { belongsTo('Partner', 'partner_id') }
    

    【讨论】:

      猜你喜欢
      • 2015-03-26
      • 2018-05-03
      • 2021-11-08
      • 2013-07-27
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多