Laravel 关系:hasManyThrough、belongsTo、belongsToMany

Posted

技术标签:

【中文标题】Laravel 关系:hasManyThrough、belongsTo、belongsToMany【英文标题】:Laravel Relationships: hasManyThrough, belongsTo, belongsToMany 【发布时间】:2018-03-08 01:43:06 【问题描述】:

嘿,我在这里有一个 Laravel 项目,你们能帮我解决这个关于关系的问题吗?

我有以下数据库结构:

users
    id
    name
    email
    password

event
    id
    description
    city_id

block_range
    id
    event_id

user_block_ranges
    user_id
    block_range_id

解释

users:一个普通的用户认证表。 (与user_block_rangesbelongsToMany 关系)

event:存储事件信息。 (与block_rangehasMany 关系)

block_range:保存事件时间块。 (与eventbelongsTo 关系)

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

提前致谢。

【问题讨论】:

你和这个问题***.com/questions/46432996/…中描述的一样,唯一的区别是你会有4个元素的链 @Aleksandrs 即使​​使用 ManyToMany 表,我也可以这样做? 【参考方案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;

【讨论】:

这对我有用,非常感谢。我非常感谢您的回答,但是,没有办法用 Laravel ORM 做到这一点? :'( 不幸的是,我还没有找到一种仅使用 Laravel 关系的简单方法:(

以上是关于Laravel 关系:hasManyThrough、belongsTo、belongsToMany的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何平均嵌套 hasMany 关系(hasManyThrough)

Laravel HasManyThrough 深度关系

Laravel Eloquent: hasManyThrough 多对多关系

Laravel HasManyThrough 关系,同时包括已删除的项目

如何从 hasManyThrough 雄辩关系返回 Laravel 中的单个模型

Laravel 关系我应该使用 hasManyThrough 还是 belongsToMany?嵌套 3 个表