我有多次迁移(比如大约10次)和表的相应模型。我面临的问题是所有迁移/表都有多个主键,但模型只有一个字符串变量来定义主键( $ primaryKey ),因此,当我保存或更新表行时使用where子句它只需要一个主键而错过另一个主键,因此最终会改变多行而不是一行。所以,基本上我切换到数据库查询,它运作良好。
所以,我的问题是,模型是否有任何性能提升?或者它只是一个设计范例?是否有任何选项可以在模型中执行相同的操作(拥有多个主键)?我知道通过重写Eloquent方法我们可以做到这一点但是还有其他好的选择吗?
答案 0 :(得分:4)
使用像Eloquent这样的ORM是一种方便,而非要求。从我所听到的情况来看,使用ORM时通常会略微降低性能,因为将查询转换为相关SQL会产生额外的开销。
通常,使用ORM会使查询更容易理解,因此仅此一点值得使用。但是,对于更复杂的查询,ORM可能会妨碍,因此您应该考虑使用另一种方法来查询数据库。您不必仅使用ORM - 您可以根据需要混合和匹配不同的方法。
Laravel将查询生成器作为编写原始SQL或使用ORM的替代方法,这对您来说可能是更好的选择。如果可以的话,我会避免编写原始SQL,因为Eloquent和Query Builder都会为你处理转义参数,以帮助避免SQL注入漏洞。
我的选择是在可能的情况下使用ORM,并在ORM妨碍时回退到查询生成器。