2
首先我为标题道歉,我找不到更好的东西。Laravel关系查询优化
在我的项目中,我有用户和组。用户可以加入一个组并创建一个组。关系定义如下。
用户模型
/** Get all the groups the user is administrator of
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function groupsAdmin()
{
return $this->hasMany('App\Group','group_admin_id','id');
}
组模式
/** Get the users in a group
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function users()
{
return $this->belongsToMany(\App\User::class,'groups_users', 'group_id','user_id');
}
我所试图做的就是让所有谁参加由用户创建的组的用户。对于我在我的用户模型编写方法:
/**
* Returns all the users who have attended groups created by this user
*/
public function getPastGroupAttendees()
{
// first verify if the user is admin of any group
if(!$this->groupsAdmin)
{
return false;
}
$attendees = array();
foreach($this->groupsAdmin as $group)
{
if(count($group->users) > 0) $attendees[] = $group->users;
}
return $attendees;
}
但是,使用这种方法的问题是它的慢,会得到新的数据慢。而且,由于用户可以加入多个组,因此我会从此方法获取重复的用户。 因此,如果任何人都可以向我展示一些方向来优化和纠正这个问题,那将会非常有帮助。
感谢,这种方式加载时间变快,但仍然有重复用户问题。例如,用户加入了由我创建的两个组。所以我会为两个组获得该用户两次。我可以遍历记录,并删除列出两次的任何用户,但这会有效吗? –
请阅读更新的答案。 –
非常感谢。我用你的第一个解决方案'merge()'和'unique()'。 –