目录
1,连接数据库
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=studyla
DB_USERNAME=root
DB_PASSWORD=zhaoheng
2,运行原生 SQL 查询
// 查询数据
var_dump(\DB::select('select * from users'));
// 删除数据,返回删除的条数
var_dump(\DB::delete('delete from users where id>100'));
// 用insert将原生sql作为第一个参数,绑定作为第二个参数
var_dump(\DB::insert('insert into users (name,email,password) values (?,?,?)',['wangxu','a@qq.com','123456']));
// 更新数据,返回受影响的行数
var_dump(\DB::update('update users set password=1234567 where name=?',['wangxu']));
//运行普通语句。有些数据库语句不会有任何返回值。对于这些语句,你可以使用 DB Facade 的 statement 方法来运行
\DB::statement('drop table users');
3,数据库事务
你可以使用 DB
facade 的 transaction
方法在数据库事务中运行一组操作。如果事务的闭包 Closure
中出现一个异常,事务将会回滚。如果事务闭包 Closure
执行成功,事务将自动提交。一旦你使用了 transaction
, 就不再需要担心手动回滚或提交的问题:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
手动使用事务
//手动开始事务
DB::beginTransaction();
$a = DB::delete("delete from user where id =1");
$b = DB::delete("delete from user where id =2");
if($a && $b) {
//提交事务
DB::commit();
}else{
//回滚事务
DB::rollback();
}
4,查询构造器
Laravel 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口。
<1>获取结果
get
方法获取结果(查询所有数据)
first
方法从数据表中获取一行数据
value
方法将直接返回该字段的值
$users = DB::table('users')->get();
$user = DB::table('users')->where('name', 'John')->first();
$email = DB::table('users')->where('name', 'John')->value('email');
<2>where子句
调用 where
最基本的方式是需要传递三个参数:第一个参数是列名,第二个参数是任意一个数据库系统支持的运算符,第三个是该列要比较的值。
$users = DB::table('users')
->where('votes', '>=', 100)
->get();
还可以传递条件数组到 where
函数中:
$users = DB::table('users')->where([
['status', '=', '1'],
['subscribed', '<>', '1'],
])->get();
whereBetween
方法验证字段值是否在给定的两个值之间:
$users = DB::table('users')
->whereBetween('votes', [1, 100])
->get();
<3>聚合
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
<4>原生表达式
在查询中使用原生表达式。可以使用 DB::raw
创建一个原生表达式
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
<5>select 指定
select
方法,可以自定义一个 select
查询指定的字段:
$users = DB::table('users')->select('name', 'email as user_email')->get();
<6>排序,限制结果数量
通过给定字段对结果集进行排序
$users = DB::table('users')
->orderBy('name', 'desc')
->get();
限制结果的返回数量
$users = DB::table('users')
->offset(10)
->limit(5)
->get();
<7>连表查询
$users = DB::table('users')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
<8>增
DB::table('users')->insert(
['email' => 'john@example.com', 'votes' => 0]
);
如果要同时获取到id
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
<9>删除
DB::table('users')->where('votes', '>', 100)->delete();
<10>改
DB::table('users')
->where('id', 1)
->update(['votes' => 1]);
<11>自增与自减
查询构造器还为给定字段的递增或递减提供了方便的方法。此方法提供了一个比手动编写 update
语句更具表达力且更精练的接口。
这两种方法都至少接收一个参数:需要修改的列。第二个参数是可选的,用于控制列递增或递减的量
DB::table('users')->increment('votes');
DB::table('users')->increment('votes', 5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes', 5);