Laravel DB和Eloquent设计

时间:2014-08-13 21:22:58

标签: laravel eloquent

我已经阅读了前面的Eloquent文档,并查看了许多不同的教程(包括几个小时的nettuts)。我有一些与Eloquent模型相关的基本数据库设计问题。如果有人能帮助我理解,我会很高兴。

因此,此数据库包含用户,合作伙伴和事件

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

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

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

因此,对于这个问题,这是一个非常基本的布局。显然,每个表中都会有其他字段提供更多信息(包括时间戳等)。

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

有了这个基本布局,我需要知道我是否在使用Events表格的正确轨道上。有时我需要查看与User关联的所有最新事件,并从partner表中提取数据(例如firstName和lastName)。

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

用户拥有多个合作伙伴

合作伙伴拥有多项活动

事件属于用户&属于合作伙伴

此设置是否允许我进行简单的雄辩电话?

以下是我理解的模型:

USERS

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

}

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

}

1 个答案:

答案 0 :(得分:0)

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

(全部简化以保持简短,但显然它们都是返回关系的方法。另外我包含外键,因为你的例子是错的,你把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') }