http://laravel.com/docs/4.2/eloquent#dynamic-properties多次调用Eloquent动态属性是否会多次访问数据库?
class Phone extends Eloquent {
public function user()
{
return $this->belongsTo('User');
}
}
$phone = Phone::find(1);
现在,如果我那么做这样的事情:
echo $phone->user->email;
echo $phone->user->name;
echo $phone->user->nickname;
威尔洋洋洒洒做一个数据库调用的每一次我使用->user
动态属性?或者这足够聪明,可以在第一次通话时缓存用户?
一次迭代将对'Phone'和'User'通话。多次迭代你必须急切加载。 http://laravel.com/docs/5.0/eloquent#eager-loading – user2094178 2015-02-11 04:23:48
http://laravel.com/docs/4.2/eloquent#eager-loading – user2094178 2015-02-11 04:24:35
我相信对'$ phone-> user'的第一个引用将加载具有该模型本地所有属性的“用户”模型。假定'email','name'和'nickname'存储在'User'中,那么这将导致只有两个数据库查询(一个用于电话,另一个用于用户)。试试看:在这些语句之后,运行dd(\ DB :: getQueryLog())来查看所做的确切查询。 – bishop 2015-02-11 04:27:26