这篇文章记录Laravel框架的基础数据库知识。
介绍
Laravel使得数据库操作异常简单,使用方式:原始SQL,fluent query builder,Eloquent ORM。
应用的数据库配置放在config/database.php,在该文件中,可以定义所有的数据库连接,并且声明默认使用哪个连接。
使用命令创建新的SQLite数据库touch database/database.sqlite,可以很容易地配置环境变量来指向这个新创建的数据库。
使用多个连接时,可以通过DBfacade的connection方法来获取每个连接。传递给connection方法的name对应config/database.php配置文件中列出的连接之一。
|
|
可以使用connection实例对象的getPdo方法来获取原始的、底层的PDO实例。
运行原始的SQL查询
一旦配置好数据库连接后,可以使用DBfacade来运行SQL语句。DBfacade为每种语句提供了方法:select、update、insert、delete、statement。
使用DBfacade的select方法来运行基本的查询:
|
|
传递给select方法的第一个参数是原始的SQL查询,第二个参数是绑定到查询上的参数绑定。select方法总是返回array结果。数组中的每个值都是PHP的StdClass对象,允许你获取对应的值。
|
|
除了使用?来表示参数绑定外,也可以使用命名绑定来执行查询:
|
|
使用DBfacade的insert方法可以执行insert语句,该方法接收原始的SQL查询语句作为第一个参数,第二个参数则是参数绑定。
|
|
update方法用来更新数据库中已经存在的记录,语句影响的行数会被返回:
|
|
delete方法用来删除数据库中的记录,影响的行数会被返回:
|
|
有些数据库操作语句不会返回任何值,对于这些类型的操作,可以使用DBfacade的statement方法:
|
|
如果想要接收到应用执行的每条SQL查询语句,可以使用listen方法,该方法用来打印查询语句或调试,可以在服务提供者中进行注册。
|
|
数据库事务
可以使用DBfacade的transaction方法来在数据库事务中执行一系列操作。如果事务闭包中发生异常,事务会自动回滚;如果闭包执行成功,事务会被自动提交。
|
|
transaction方法接收可选的第二个参数,用来定义当死锁发生时,事务重新尝试的次数。一旦尝试次数超出,就会抛出异常:
|
|
如果想要手动开始一个事务,能够完全地掌控回滚和提交,可以使用beginTransaction。
|
|