0
点赞
收藏
分享

微信扫一扫

[李景山php]每天laravel[033]-laravel 基础知识 --- 数据库


1 基础配置
1.1 laravel 支持的数据库有,MySQL,Postgres,SQLite,SQL Server
1.2 数据库配置文件位置 config/database.php
1.3 支持读写分离的配置

'mysql' => [
'read' => [
'host' => '192.168.1.1',
],
'write' => [
'host' => '196.168.1.2'
],
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',],

1.4 基础使用 方式 增删改查 及其它通常操作
一般使用

$user = DB::select('select * from users where active = ?',[1]);

绑定名字

$result = DB::insert('insert into users (id,name) values (?,?)',[1,'JingShan']);

更新

$affected = DB::update('update users set votes = 1000 where name = ?',['john']);

删除

$deleted = DB::delete('delete from users');

通常的语句

DB::statement('drop table users');

1.5 调试方式,注册query 监听器
在我们的 AppServiceProvider 里面选择boot函数添加,监听函数如下

public function boot(){
DB::listen(function($sql,$binding,$time){
// 执行监听的逻辑
});
}

1.6 事务支持
自动事务处理

DB::transaction(function(){
DB::table('users')->update(['votes'=>1]);
DB::table('posts')->delete();
});

手动事务支持

DB::beginTransaction();
DB::rollBack();
DB::commit();

1.7 更多数据库及PDO方式支持
更多数据库连接灵活选择

$users = DB::connection('foo')->select();

使用PDO的连接实例化

$pdo = DB::connection()->getPdo();

2 查询构造器
2.1 获取全部信息

$users = DB::table('users')->get();

2.2 返回单条数据

$user = DB::table('users')->where('name','jhon')->first();

返回单条数据里面的单个字段

$email = DB::table('users')->where('name','Jhon')->value('email');

2.3 分解表格结果

DB::table('users')->chunk(100,function($users){
foreach($users as $user){
// TODO
}
});

如果当内部的闭包匿名函数返回错误的时候,停止分解表格

DB::table('users')->chunk(100,function($users){
// TODO
return false;// 返回false 就停止后面的拆分了。
});

2.4 取出一列数据作为一个集合
普通取出

$titles = DB::table('roles')->lists('title');
foreach($titles as $title){
echo $title;
}

增加key的方式取出

$roles = DB::table('roles')->lists('title','name');
foreach($roles as $name => $title){
echo $title;
}

2.5 计算聚合结果如:count,max,min,avg,sum 实例代码如下:

$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
$price = DB::table('orders')->where('finalized',1)->avg('price');

2.6 选择数据的使用
基础使用

$users = DB::tables('users')->select('name','email as user_email')->get();

去重选择

$users = DB::table('users')->distinct()->get();

二次编辑选择字段

$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();

使用原生表达式的选择方式

$users = DB::table('users')
->select(DB::raw('count(*) as user_count ,status'))
->where('status','<>',1)
->groupBy('status')
->get()

2.7 joins 联合查询
默认的join使用

$user = DB::table('users')
->join('contacts','users.id','=','contacts.user_id')
->join('orders','users.id','=','orders.user_id')
->select('users.*','contacts.phone','orders.price')
->get();

左链接

$user = DB::table('users')
->leftJoin('posts','users.id','=','posts.user_id')
->get();

更复杂的 join 查询

DB::table('users')
->join('contacts',function($join){
$join->on('users_id','=','contacts.user_id')
->where('contacts.user_id','>',5);
})
->get();

或者可以使用 orOn 或者是 orWhere 方式
2.8 联合数据结果 Unions

$first = DB::table('users')
->whereNull('first_name');
$users = DB::table('users')
->whereNull('last_name')
->union($first)
->get();

2.9 强大的 where 查询操作
基础的

$users = DB::table('users')->where('votes','=',100)->get();

基础 等于 简化版本

$users = DB::table('users')->where('votes',100)->get();

其它关系操作

$users = DB::table('users')->where('votes','>=',100)->get();
$users = DB::table('users')->where('votes','<>',100)->get();
$users = DB::table('users')->where('votes','like=','%a%')->get();

or条件的拼合

$users = DB::table('users')
->where('votes','>',100)
->orWhere('name','John')
->get();

whereBetween 方式

$users = DB::table('users')->whereBetween('votes',[1,100])->get();

whererNotBetween

$users = DB::table('users')->whereNotBetween('votes',[1,100])->get();

whereIn/whereNoIn/whereNull/whereNotNull

$users = DB::table('users')->whereIn('id',[1,2,4])->get();
$users = DB::table('users')->whereNotIn('id',[1,2,4])->get();
$users = DB::table('users')->whereNull('id')->get();
$users = DB::table('users')->whereNotNull('id')->get();

高阶where条件查询

DB::table('users')
->where('name','=','John')
->orWhere(function($query){
$query->where('votes','>',100)
->where('title','<>','Admin');
})
->get();

翻译过来:

select * from users where name = 'John' or (votes > 100 and title <> 'Admin')

exists Statemets 语句条件

DB::table('users')
->whereExists(function($query){
$query->select(DB::raw(1))
->from('orders')
whereRaw('orders.user_id = users.id ');
})
->get();

结果为:

select * from users where exits (select 1 from orders where orders.user_id = users.id )

Ordering,Grouping,Limit,Offset 设置

$users = DB::tabel('users')
->orderBy('name','desc')
->get();

$users = DB::table('users')
->groupBy('account_id')
->having('account_id','>',100)
->get();

$users = DB::table('orders')
->select('department',DB::raw('SUM(price) as total_sales'))
->groupBy('department')
->havingRaw('SUM(price) > 2500')
->get();

对结果集进行处理

$users = DB::table('users')->skip(10)->take(5)->get();

2.10 插入数据
普通插入

DB::table('users')->insert(['email'=>'john@example','votes'=>0]);

多行插入

DB::table('users')->insert([
['email'=>'taylor@example.com','votes'=>0],
['email'=>'123@example.com','votes'=>0 ]
]);

返回自增长ID

$id = DB::table('users')->insertGetId(['email'=>'john@example.com','votes'=>0]);

更新数据:

DB::table('users')
->where('id',1)
->update(['votes'=>1]);

增长/减少

DB::table('users')->increment('votes');
DB::table('users')->increment('votes',5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes',5);

可以混合增长

DB::table('users')->increment('votes',1,['name'=>'John']);

2.11 删除信息/ 清空数据库

DB::table('users')->delete();
DB::table('users')->where('votes','<',100)->delete();
DB::table('users')->truncate();// 清空数据库

2.12 锁

DB::table('users')->where('votes','>',100)->shareLock()->get();
DB::table('users')->where('votes','>',100)->lockForUpdate()->get();


举报

相关推荐

0 条评论