Orm 热切的装载,雄辩的

Orm 热切的装载,雄辩的,orm,laravel,eloquent,Orm,Laravel,Eloquent,我有一个简单明了的问题。在Laravel中使用雄辩的ORM时,以下哪项查询是首选查询 $post = Post::with(array('user', 'comments.from'))->find($id); $post = Post::with(array('user', 'comments.from'))->where('postID', $id)->get(); 我正在努力寻找->查找和->获取与急切加载之间的区别 postID是我在上面posts表中的主键。通过我的

我有一个简单明了的问题。在Laravel中使用雄辩的ORM时,以下哪项查询是首选查询

$post = Post::with(array('user', 'comments.from'))->find($id);
$post = Post::with(array('user', 'comments.from'))->where('postID', $id)->get();
我正在努力寻找->查找和->获取与急切加载之间的区别

postID是我在上面posts表中的主键。通过我的调试器,这两种性能几乎相同,每个都运行8个查询

如果有人能解释一下,我真的很感激

这是你应该使用的;它将返回一个结果模型:

$post = Post::with(array('user', 'comments.from'))->find($id);
这将返回一组结果,即使只有一个:

$post = Post::with(array('user', 'comments.from'))->where('postID', $id)->get();
您可能想做的不是方法2,而是:

$post = Post::with(array('user', 'comments.from'))->where('postID', $id)->first();
方法1和方法3基本上会得到完全相同的结果。方法1的适应性更强,因为如果更改表的主键,它将继续工作。它也比其他两种方法更快,因为它不构建模型集合

顺便说一句,这与即时加载无关,因为这些函数在任何查询上的工作方式都是相同的

这是你应该使用的;它将返回一个结果模型:

$post = Post::with(array('user', 'comments.from'))->find($id);
这将返回一组结果,即使只有一个:

$post = Post::with(array('user', 'comments.from'))->where('postID', $id)->get();
您可能想做的不是方法2,而是:

$post = Post::with(array('user', 'comments.from'))->where('postID', $id)->first();
方法1和方法3基本上会得到完全相同的结果。方法1的适应性更强,因为如果更改表的主键,它将继续工作。它也比其他两种方法更快,因为它不构建模型集合


顺便说一句,这与即时加载无关,因为这些函数在任何查询上都会起相同的作用。

这算是即时加载吗?@user1011713勉强lol。with和load用于Laravel中的即时加载,但在本例中,您只是使用它们将附加信息加载到您的模型中。如果您实际上获得了一组模型,例如Post::with'comments'->get获得所有带有注释的帖子,那么这将被认为是迫不及待的加载,因为您只需两次查询即可检索所有数据,与n+1查询相反。你知道我如何才能快速加载关系吗?@user1011713除非你处理多个帖子,否则这是无关紧要的。否则,你会像这里的Book方法那样做,这是否被认为是即时加载?@user1011713勉强lol。with和load用于在Laravel中进行即时加载,但在本例中,你只是使用它们将附加信息加载到模型中。如果您实际上获得了一组模型,例如Post::with'comments'->get获得所有带有注释的帖子,那么这将被认为是迫不及待的加载,因为您只需两次查询即可检索所有数据,与n+1查询相反。你知道我如何才能快速加载关系吗?@user1011713除非你处理多个帖子,否则这是无关紧要的。否则,您将执行类似于这里的Book方法的操作