【发布时间】:2018-10-08 20:51:33
【问题描述】:
使用 Laravel 5.1,我为我的 HTML5 游戏建立了深度连接和嵌套模型。当玩家登录时,它会加载他们的个人资料。
每个个人资料都有m:m 完成的任务、m:m 完成的任务、m:m 完成的小游戏等。
任务/任务/小游戏是belongsTo关系,即任务belongsTo任务,小游戏belongsTo任务等
急于将这些加载到用户->个人资料上然后需要大量时间。
然后我需要做的是只急切地加载配置文件的tasks、minigames 等 ID。我通过$appends尝试了这个:
class Profile extends BaseModel
{
protected $with = ['game', 'quests'];
protected $appends = ['task_ids'];
public function getTaskIdsAttribute()
{
return $this->tasks->pluck('id');
}
不过,这仍会加载模型和一组任务 ID 值(加载的 task 模型也急切地加载其相关子代。)。 tasks 是一个包含两个急切加载 Task 模型的数组:
我需要加快登录速度,那么如何在没有其他属性的情况下仅加载 ID?
$start = microtime(true);
$user = User::find(Authorizer::getResourceOwnerId(), // how can I add callback here?);
$time = microtime(true) - $start;
【问题讨论】:
-
网络传输或查询时间是性能瓶颈吗?
-
@Rafael 是的,我坚信如此
-
为了确定,请提供网络传输和查询时间指标
标签: php laravel laravel-5.1 eager-loading