转载自:https://blog.youkuaiyun.com/zjiang1994/article/details/77054277
基本语法
//table用来获取表名
//get是获取全部记录
$users = DB::table('users')->get();
//返回StdClass对象,可以循环取出
foreach ($users as $user) {
echo $user->name;
}
//获取查询到的第一条记录
$user = DB::table('users')->where('name', 'John')->first();
//结果可以这样取
echo $user->name;
//获取指定列(email)的值
//注意是查询到的第一条记录的指定列的值
$email = DB::table('users')->where('name', 'John')->value('email');
//获取数据列值列表
//就是只获取固定列
$titles = DB::table('roles')->pluck('title');
//而且也可以指定另一个列作为键
//获取title列作为value,name列作为key
$roles = DB::table('roles')->pluck('title', 'name');
select
//指定查询列
$users = DB::table('users')->select('name', 'email as user_email')->get();
//如果已经有一个查询,但是想添加查询列
$query = DB::table('users')->select('name');
//可以使用addSelect
$users = $query->addSelect('age')->get();
distinct --强制返回不重复的列
$users = DB::table('users')->distinct()->get();
DBd的raw方法
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
join – 多表联合查询
$users = DB::table('users')
//表名,条件,可以多次join
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
//左连接
$users = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
//交叉连接
//交叉连接在第一张表和被连接表之间生成一个笛卡尔积
$users = DB::table('sizes')
->crossJoin('colours')
->get();
骚操作
可以指定更多的高级连接子句,传递一个闭包到join方法作为该方法的第二个参>数,该闭包将会返回允许你指定join子句约束的JoinClause对象.
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')->orOn(...);
})
->get();
//如果要用where
DB::table('users')
->join('contacts', function ($join) {
$join->on('users.id', '=', 'contacts.user_id')
->where('contacts.user_id', '>', 5);
})
->get();
Union–查询构建器还提供了“联合”两个查询的快捷方式,比如,你可以先创建一个查询,然后使用union方法将其和第二个查询进行联合.
(unionAll同样可用)
$first = DB::table('users')
->whereNull('first_name');
$users = DB::table('users')
->whereNull('last_name')
->union($first)
->get();
insert
DB::table('users')->insert([
['email' => 'taylor@example.com', 'votes' => 0],
['email' => 'dayle@example.com', 'votes' => 0]
]);
//自增ID
$id = DB::table('users')->insertGetId(
['email' => 'john@example.com', 'votes' => 0]
);
update
DB::table('users')
->where('id', 1)
->update(['votes' => 1]);
//更新JSON字段
DB::table('users')
->where('id', 1)
->update(['options->enabled' => true]);
//增加/减少(骚操作)
DB::table('users')->increment('votes');
DB::table('users')->increment('votes', 5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes', 5);
delete
DB::table('users')->delete();
DB::table('users')->where('votes', '>', 100)->delete();
//如果你希望清除整张表,也就是删除所有列并将自增ID置为0,可以使用truncate方法
//很暴力
DB::table('users')->truncate();