Php 如果我的应用程序中有许多Laravel4查询需要DB::raw,那么使用Eloquent有什么好处?

Php 如果我的应用程序中有许多Laravel4查询需要DB::raw,那么使用Eloquent有什么好处?,php,mysql,orm,laravel,laravel-4,Php,Mysql,Orm,Laravel,Laravel 4,我不喜欢看电影。伟大的SO撰稿人比尔·卡温的想法很好地代表了我的感受。请参见和(并阅读他的) 我认为在存储库模式或/和DAL中使用良好的solid SQL是创建应用程序的最佳方法,该应用程序将不仅仅是我在一个又一个教程中看到的小示例(使用简单数据库)。(我再也不想看到另一个Posts::model()->findAll();请举个例子!)。似乎所有的精力都花在了如何做一个很酷的单行程序上,而不是一个又一个真实的场景。尝试复杂联接、自联接、重别名、串联、嵌套or/and、结果上的聚合函数或排序、子

我不喜欢看电影。伟大的SO撰稿人比尔·卡温的想法很好地代表了我的感受。请参见(并阅读他的

我认为在存储库模式或/和DAL中使用良好的solid SQL是创建应用程序的最佳方法,该应用程序将不仅仅是我在一个又一个教程中看到的小示例(使用简单数据库)。(我再也不想看到另一个
Posts::model()->findAll();
请举个例子!)。似乎所有的精力都花在了如何做一个很酷的单行程序上,而不是一个又一个真实的场景。尝试复杂联接、自联接、重别名、串联、嵌套or/and、结果上的聚合函数或排序、子查询、组合键、表前缀,您就开始明白我的意思了

然而,我知道这些年来他们已经变得更好了,我非常喜欢拉威尔4,我想我最终需要给他们一次尝试。但是在评估了我的需求之后,似乎我的许多查询都需要运行“raw”
DB::select(DB::raw
,因为Eloquent无法正确处理它们,或者与直接使用SQL相比,表达它们变得更加复杂


当许多查询必须“原始”运行时,使用雄辩/查询生成器有什么好处,而不是纯粹使用SQL并在存储库或DAL中添加任何方法来满足您的所有数据访问需求?因为在我看来,Laravel中的原始查询与纯SQL相同,我没有在这些情况下获得ORM提供的任何优势。我将被迫为我已经具备的功能创建自己的方法对于那些
DB::raw
情况,在ORM中使用诸如访问器、变异器、时间戳、软删除等。同时,交换与Eloquent兼容的数据库引擎的优势也将丢失。

我只是在拉威尔上做些尝试,但以下是我的想法

我认为ORM的优势在于用它来代替原始sql查询。我的感觉是,如果你已经必须编写原始sql查询,那么就搁置ORM,自己动手完成。模型可能足够复杂,不管怎样,你都会长期遇到效率问题

想到的第二个问题是使用ORM和原始查询之间的上下文切换。Karwin在他的博客文章中提到,大多数人“不熟练”地使用ORM。我的猜测是,如果您将其用于非常简单的数据访问/查询,您将不会对其有深入的了解,并且将属于该类别。ORM可能非常复杂,很难对如何正确使用它们有良好的感觉


注意:到目前为止,我还没有找到一个我非常喜欢的ORM来大规模实施,但我有一个简单的项目,我将在与Laravel合作时尝试使用它。

原因很少,易于阅读、可维护,并且不会成为新手的噩梦。对于正在写作的人来说,可能也应该是这样直接SQL。他们应该坚持可读的、可维护的代码。有哪些新员工会比ORM所基于的SQL更熟悉ORM?对我来说……某个例子中,ORM的使用“不熟练”当几个查询被触发并大大增加一个页面的查询计数时。这可能是ORM本身的一个内置缺陷,并且“不熟练”地使用它在这种情况下,这意味着你在不应该使用的时候使用它。另外,人们将不太愿意花时间复制ORM输出的查询,并在其上运行解释或尝试优化它。如果基础教程没有“大量”使用ORM顺便说一句,这是部分原因。谢谢你的回答,克里斯。如果没有其他编钟在这里的话,我可能会接受。这证实了我担心的事情。我想,我讨厌失去我真正喜欢的框架的这么大一部分。我想这是一个伟大的想法。这让我觉得,使用ORM可能会导致开发人员甚至没有意识到我是如何工作的任何查询或生成查询时。当DB因此遭受重击时,他/她会感到惊讶。使用原始SQL,您可以确切地知道何时运行查询,因为查询是您自己编写的。整个ORM问题促使我越来越多地使用SLIM框架,因为它可以在没有重型框架的情况下完成一些我想要的事情。它很轻当然是在“魔法”上。我没听说过SLIM。我必须去看看。包管理(使用composer之类的工具)和Laravel的路由非常好。社区在SLIM上非常活跃吗?(我注意到你在San Antone,所以我在德克萨斯州的抽签中说了“漂亮”,因为我在奥斯汀,来自西德克萨斯州。:-)