首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这种情况下,我应该使用Laravel雄辩的语言还是使用Query?

问在这种情况下,我应该使用Laravel雄辩的语言还是使用Query?
EN

Stack Overflow用户
提问于 2022-09-17 15:23:06
回答 2查看 79关注 0票数 0

我应该在Laravel 9中使用吗?

代码语言:javascript
复制
 DB::table('galleries')->insert(
 ['book_id' => $book->id, 'photo' => $name, 'cover' => 1],
 );

还是拉勒维尔的口才?

代码语言:javascript
复制
Gallery::create(
['book_id' => $book->id, 'photo' => $name, 'cover' => 1],
);

那有什么区别呢?

EN

回答 2

Stack Overflow用户

发布于 2022-09-17 16:21:44

两者基本上是一样的。当您想要插入大量数据时,唯一的区别是。

当处理大量数据时,查询生成器的性能要比雄辩的ORM快得多。

票数 1
EN

Stack Overflow用户

发布于 2022-09-17 17:09:45

insert()查询生成器方法差异:

  1. 不同之处在于,query insert()在幕后运行mysql原始插入查询,与mysql raw查询一样,您可以在单个查询中创建多个行。
代码语言:javascript
复制
 DB::table('galleries')->insert(
 ['book_id' => $book->id, 'photo' => <photo A path>, 'cover' => 1],
 ['book_id' => $book->id, 'photo' => <photo B path>, 'cover' => 0],
 );

上面的查询将在单个查询中插入两行。

  1. 第二件事是,它是非常快速和优化的速度相比雄辩的建设者create()方法。
  2. 第三,它不是发射model events,即creating、created事件等。
  3. 结果不是返回创建的模型。

create()雄辩的方法差异:

  1. 一次只插入一行。每当您需要插入多个行/模型时,都需要在create()中运行foreach loop方法,或者需要使用createMany()方法。

它们都像create()一样工作。假设您想在数据库表中插入100行,那么这两行都将在幕后运行100 insert查询。

  1. 它发射模型事件,即creating、created事件等。
  2. 它返回插入模型的结果。
  3. 它比insert()查询生成器方法要慢,因为它在插入过程中处理大量的计算、事件管道。

建议:

如果要捕获模型事件,则必须使用eloquent()。如果您想要查询优化,快速插入,并且不关心model events,那么用户insert()方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73756131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档