为什么我需要使用'在Laravel Eloquent?

时间:2015-06-12 02:11:21

标签: php laravel eloquent

首先,抱歉我的英语不好。

我有Eloquent查询

$gigs = Gig::active()
        ->plusGigs()
        ->with('member')
        ->paginate(16);

我的模特中有功能

public function member()
{
    return $this->belongsTo('App\User', 'USERID', 'USERID')
        ->select(array(
            'USERID',
            'username'
    ))
}

当我尝试在我的视图文件上使用时

{{ $gig->member->username }}

耶。它有效但如果我不使用' with('member')'在我的Eloquent查询中

它仍然有效{{ $gig->member->username }}

为什么我需要使用' with'在我的雄辩中?

感谢。

1 个答案:

答案 0 :(得分:2)

当您使用with时,laravel知道也会在两个查询中预取相关的members,而不是多个查询。这称为Eager Loading

所以,查询听起来像, "获取数据库的所有演出。" "获得所有这些演出的成员。"

所有这些仅在两个查询中。

如果在不使用with关键字的情况下运行它,laravel每次执行{{ $gig->member->username }}时都需要点击一个新的数据库查询。这被称为(n+1) problem。因为,您需要(n + 1)个新查询才能从数据库中获取相关数据(' n'是您案例中的演出数量。)

在这种情况下查询听起来像, "获得所有的演出。"

然后,每当查询听起来像是在循环播放时,

"获取演出1"

的成员

"获取演出2"

的成员

"获取gig n"

的成员

由于数据库查询在服务器上是一个昂贵的负载并导致时间延迟,因此您需要尽可能地减少这些负担。对于少量项目,时间延迟可以忽略不计,但遵循最佳实践总是好的。