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_ranges
有belongsToMany
关系)
event
:存储事件信息。 (与block_range
有hasMany
关系)
block_range
:保存事件时间块。 (与event
有belongsTo
关系)
真正的问题是:如何获取用户的所有事件?通过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 Eloquent: hasManyThrough 多对多关系
Laravel HasManyThrough 关系,同时包括已删除的项目