【发布时间】:2015-08-16 20:29:16
【问题描述】:
我正在考虑使用 Laravel 开发一个新网站。我正在阅读http://vegibit.com/laravel-eloquent-orm-tutorial/ 上的教程,关于使用 Eloquent 连接表和检索数据。在最后一个示例中,他们实际上是在尝试进行连接,但 Eloquent 仍然在执行两个查询而不是一个。是 Eloquent 效率低下还是这只是一个糟糕的例子?似乎这可以简单地通过一个左连接查询来完成。任何人都可以对此提供一些见解吗?有没有更好的方法来执行这个查询?具体例子是:
Route::get('/', function()
{
$paintings = Painting::with('painter')->get();
foreach($paintings as $painting){
echo $painting->painter->username;
echo ' painted the ';
echo $painting->title;
echo '<br>';
}
});
导致以下查询:
string ‘select * from paintings‘ (length=25)
string ‘select * from painters where painters.id in (?, ?, ?)’ (length=59)
Leonardo Da Vinci painted the Mona Lisa
Leonardo Da Vinci painted the Last Supper
Vincent Van Gogh painted the The Starry Night
Vincent Van Gogh painted the The Potato Eaters
Rembrandt painted the The Night Watch
Rembrandt painted the The Storm on the Sea of Galilee
【问题讨论】:
-
我对这个主题没有权威,但正如我所见,雄辩总是比直接与数据库交谈要慢,因为创建查询会产生开销,然后将所有结果绑定到您正在使用的任何模型的实例。无论如何,这不会是无法承受的开销,但它会以某种形式存在。您对新项目的预期负载是什么?
-
您始终可以创建视图并拥有只读的 eloquent 模型,以便于访问数据库。我对此的尝试是 eloquent 不会执行连接,因为每个模型都是独立的,您可以更新每个模型,而不管它们之间的任何类型的关系,这可能是它选择执行两个查询的原因更容易映射到对象。再说一次,我可能是错的,但事实是——如果你想要一个连接、一个查询和 eloquent 的所有好处——你可以实现它。
-
我还没有做出任何最终决定。在以前的项目中,我总是手动编写查询,所以我并不反对。一位朋友最近在吹嘘 Eloquent 是多么简单,但当我可以快速启动查询时,我并没有看到真正的优势。我们预计会产生一些复杂查询的负载,因此效率很重要。
-
使用 Eloquent 会更快。并不是查询很难构建,Eloquent 为您做的就是让您能够快速地对一组表执行 crud。我说的是经验,因为办公室里的人试图说服我几个星期,Eloquent 和 Doctrine 击败了手动查询。在我放弃之后,我可以保证使用 ORM 绝对可以帮助您更快地开发,而且最好的部分是您可以更轻松地进行测试。
标签: php mysql laravel eloquent