在Laravel中建立数据库连接的最佳方式

时间:2016-12-19 05:25:10

标签: php mysql laravel

据我所知,在Laravel中有两种连接数据库的方法。

方法1:

// the name of table is defined in the model file
Model_Name::WHERE(1)->get();

方法2:

DB::table('table_name')->WHERE(1)->get();

好的,两者的工作方式相同,结果相同。那么不同之处是什么?在哪种情况下哪一个更好?

无论如何,我什么时候应该使用哪一个?

3 个答案:

答案 0 :(得分:5)

Laravel提供了一个内置的ORM,称为Eloquent,它使我们与数据库的交互变得容易。 Eloquent ORM提供Active Record实现,这意味着您在MVC结构中创建的每个模型都对应于数据库中的表。这里,'Post'模型将对应于“posts”表。因此,您可以按如下方式访问posts表中的数据

Post::all()          // Get all the posts 
Post::find($id)      // Find a post
Post::delete($id)    // Delete a post

Fluent查询构建器

顾名思义,它提供了流畅的界面来创建和运行数据库查询。 Laravel查询构建器始终使用PDO参数绑定来保护您的应用程序免受SQL注入攻击。无需清除作为绑定传递的字符串。一些例子是。

DB::table('posts')->get();                       // Get all the posts
DB::table('posts')->where('id',$id)->first();    // Find a post
DB::table('posts')->where('id',$id)->delete();   // Delete a post

雄辩的优点

You can use all Fluent functions in eloquent. But, You can’t use eloquent functions in the query builder
Eloquent model relationship
Easy to use
Code Readability

雄辩的缺点

Execution time may increase little bit
In some places, Eloquent fail to compete against SQL queries for complex queries

<强>结论

因为,雄辩和流畅的查询构建器都有自己的优点和缺点。您应该根据要求使用这两者。尽可能多的事情,80:20规则似乎适用于此。使用eloquent为您处理80%的工作,并准备使用流利为其他20%编写SQL和一些持久性代码。不要期待过多的雄辩,否则你最终会遇到一些奇怪的错误和性能问题。

Complete Reference

答案 1 :(得分:4)

如果性能不是问题,我更喜欢第一种方法,因为:

假设您已在代码的100个位置使用了第二种方法。现在,您想要出于某些特定原因更改表名。你会怎么做?您需要在使用特定table_name的100个地方进行更改。

DB::table('table_name')->where(1)->get(); //change table_name in 100 palces

如果你使用第一种方法,你可能已经写过了

Model_Name::where(1)->get(); //no change here

现在,您需要更改表名,您只需更改/添加模型中的表属性即可。像这样:

class Model_Name{
    protected $table = 'new_table_name'; //change table_name in one place
}

别无他法。您的表名非常灵活。

注意:第一种方法是Eloquent ORM方法,它有许多ORM应具备的功能。另一方面,流畅的查询表现更好。你可以随心所欲地使用它。但是,避免在单个项目中混淆两种方法是我认为的好习惯。

答案 2 :(得分:1)

这两种方法都有相同的结果,但是当你使用Eloquent时,将允许编码/工作相当好的关系,这样你就可以保持代码的可读性,而Fluent将有助于运行复杂的SQL查询。

Laravel提供了一个名为ORM Eloquent的内置功能。 ORM Eloquent可以轻松地通过每个模型与数据库进行代码交互。只需要在MVC结构中创建对应的DB表。使用也很简单,如:

Model_name::DB_interaction_functions

Fluent查询构建器提供了预构建的流畅接口,可以通过以下简单方式创建和运行数据库查询:

DB::table('table_name')->DB_interaction_functions

这是一件简单的事情,但如果我们谈论Eloquent和Fluent的表现,Fluent最好是Eloquent。我无法测试它,但你可以应用它。

<强>综述
Eloquent是一种简单的使用方式和良好的代码可读性,但执行查询只需要更多的时间。虽然Fluent在执行复杂的SQL查询时很好。

参考:Laravel Eloquent vs Fluent query builder