【发布时间】:2017-10-20 07:50:09
【问题描述】:
我有 2 个模型:Post 和 User,其中每个 Post 有一个 User,每个 User 有很多 Posts。
用户.php:
// User.php
public function posts()
{
return $this->hasMany(Post::class);
}
Post.php:
// Post.php
public function user()
{
return $this->hasOne(User::class);
}
我通过我的PostsController 加载帖子:
// PostsController.php
public function show($id)
{
$post = Post::find($id);
return view('posts.show', compact('post'));
}
在视图中,我调用了我在中加载的帖子和与帖子相关的用户。我多次调用用户对象:
// views/posts/show.blade.php
<h1>{{ $post->title }}</h1>
<p>{{ $post->user->name }}</p>
<p>{{ $post->user->email }}</p>
这 2 次对 $post->user 资源的调用会对数据库进行 2 次调用吗?
Eloquent 关系在后端是如何工作的?当我获得post 对象时,关系是否总是返回整个user 对象,还是懒惰地获得user 数据?
我担心将我的数据库托管给一个提供商,该提供商根据从数据库传输的数据 (GCP) 收费,我不明白 Eloquent 关系将如何调用数据库。
【问题讨论】:
-
From docs:动态属性是“延迟加载”,这意味着它们只会在您实际访问它们时加载它们的关系数据
-
它只会运行一次
$post->user -
我觉得这个问题太笼统了。您的问题在文档和源代码中都有介绍。
标签: php mysql laravel laravel-5.5