我已经阅读了前面的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');
}
}
答案 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') }