用Laravel Eloquent还是查询构造器?

文章作者:最后的阿莫西林

发布时间:2022-06-26 16:09

如果你还不知道laravel ORM Eloquent是什么,可以看一下这篇文章《Laravel Eloquent ORM理解以及常用方法返回值》。看完我想你心里至少有了50%的答案。

不考虑什么百万并发,千万访问量(如果你到达了这种级别,可以直接关闭这篇文章),就拿我这个小网站来说,一天有300UV我已经很开心了,所以对于我来说,用laravel Eloquent更适合我。

代码演示

laravel Eloquent

$articles = Article::with('user')
    ->limit(1000)
    ->get();

查询构造器

$articles = DB::table('articles')
    ->join('users', 'articles.user_id', '=', 'users.id')
    ->limit(1000)
    ->get();

SQL

$articles = DB::select("select * FROM articles JOIN users ON articles.user_id = users.id limit 1000");

从代码可读性简洁性来说,Eloquent更好。laravel也可以直接用SQL,但是没必要,因为查询生成器使用PDO参数绑定来保护应用程序免受SQL注入攻击。无需清理或清理作为查询绑定传递给查询生成器的字符串,很强大,就不用纯写SQL了。

上述代码中,返回的是一个文章集合,查询1000篇文章的速度可能大家都差不多,可是如果是20000,30000那就不一样了,查询构造器和Eloquent前者会更快,所以从性能上,大量的内容操作,用查询构造器更好。

既然查询构造器更快,为啥我不用呢,因为我的网站用Eloquent与数据库交互更舒服,查询构造器使用的是SQL链接,最直接的增删改查;而Eloquent使用是模型关系来处理表,一个模型对应一张表,举个例子:

$article=Article::find($id)->first();
$article->user_name="returnmain";
$article->title="文章1";
$article->content="文章的正文";
$article->save();//保存

通过查询id,返回的是文章的对象实例,我可以方便的操作对象的属性,然后保存。通常数据库表会相互关联,比如文章类别,文章tag,文章作者等等,我用Eloquent会更加方便,我不需要很懂SQL代码,它会帮我自动完成,可读性也更好,Eloquent内置了很多功能,比如模型事件监听、特征,懒加载等等,性能对于我来说不那么重要。

什么时候用查询构造器?

比如查询某个时间段写了多少篇文章,批量增加文章表字段默认值,更复杂的查询,导出文件等等。你在开发一个技术论坛网站,有10万的用户,那么用查询构造器会更好。

如果这篇文章对你有帮助,我真是开心极了~