Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails:包含M2M表时额外的不必要查询_Sql_Ruby On Rails_Performance_Many To Many_Find - Fatal编程技术网

Sql Rails:包含M2M表时额外的不必要查询

Sql Rails:包含M2M表时额外的不必要查询,sql,ruby-on-rails,performance,many-to-many,find,Sql,Ruby On Rails,Performance,Many To Many,Find,假设我有一张教师桌,桌上有一张:has_和_besides_和一张学生桌有很多关系。我有一个学生教师表,映射字段[教师id,学生id] 当我执行查找并希望培养所有教师及其所有学生时,我会: Teacher.find(:all, :include => :students) 虽然我已经包括了学生表,但最终还是得到了一个查询,查询出了教师,然后又查询了n个学生/教师表,而n是第一次查询返回的教师数量 为什么Rails没有加入到students\u teachers表中,而是发送这么多查询?这

假设我有一张教师桌,桌上有一张:has_和_besides_和一张学生桌有很多关系。我有一个学生教师表,映射字段[教师id,学生id]

当我执行查找并希望培养所有教师及其所有学生时,我会:

Teacher.find(:all, :include => :students)
虽然我已经包括了学生表,但最终还是得到了一个查询,查询出了教师,然后又查询了n个学生/教师表,而n是第一次查询返回的教师数量


为什么Rails没有加入到students\u teachers表中,而是发送这么多查询?

这是Rails急切加载的预期行为,以防止N+1问题(即必须运行一个查询来查找所有教师,然后每个教师运行另一个查询来查找所有学生)。请参阅


如果您想在较少的查询中执行此操作,则需要使用
:joins

谢谢您的回答,尽管用joins替换include不会产生预期的结果。如果我希望留下一系列教师对象和他们的学生协会工作,那么语法应该是什么?(考虑到教师发现呼叫可能存在条件),