2017-09-26 130 views
1

Heyy,我有一个Laravel项目在这里,你们能帮我解决这个关系问题吗?Laravel关系:hasManyThrough,belongsTo,belongsToMany

我有以下的数据库结构:

users 
    id 
    name 
    email 
    password 

event 
    id 
    description 
    city_id 

block_range 
    id 
    event_id 

user_block_ranges 
    user_id 
    block_range_id 

说明

users:一个正常的用户认证表。 (与有belongsToMany关系)

event:存储活动信息。 (与block_rangehasMany关系)

block_range:保存事件的时间块。 (具有belongsToevent的关系)

真正的问题是:我如何获取用户的所有事件?通过user_block_ranges然后block_range的关系?也许使用hasManyThrough

在此先感谢。

+1

你有同样的问题描述https://stackoverflow.com/questions/46432996/laravel-5-4-table-relationship-between-3-small-tables,唯一的区别,你将有链4元素 – Aleksandrs

+0

@Aleksandrs即使有ManyToMany表,我也可以这样做吗? – Rukado

回答

1

我相信你的模型是这样的:

用户模式

class User extends Model 
{ 
    public function blockRanges() 
    { 
     return $this->belongsToMany('App\BlockRange', 'user_block_ranges', 'user_id', 'block_range_id'); 
    } 
} 

块范围模式

class BlockRange extends Model 
{ 
    public function event() 
    { 
     return $this->belongsTo('App\Event'); 
    } 
} 

为了让你能做到这一点,用户的所有事件:

$user = App\User::find(1); 

$events = array(); 

foreach ($user->blockRanges as $block_range) { 
    $events = $block_range->event; 
} 
+0

这对我很有用,非常感谢。我真的很感谢你的回答,但是,没有办法用Laravel ORM来做到这一点? :'( – Rukado

+1

不幸的是,我还没有找到一个简单的方法来做到这一点,只有与Laravel关系:( –