Laravel 5.4 官方文档摘记:Laravel操作数据库

33 篇文章 0 订阅

Laravel操作数据库

DB

数据库基本操作

使用原生SQL进行查询。

// 查询
$result=DB::select('select * from user where user_id=?',[$user_id]);
$result2=DB::select('select * from user where user_id=:id',['id'=>$user_id]);
// 插入,返回被更新的记录数
$affected=DB::insert('insert into users(id,name) values(?,?)',[$user_id,$user_name]);
// 删除,返回被删除的记录数
$deleted=DB::delete('delete from users');
// 运行一个通用语句
DB::statement("drop table user");
// 事务
DB::transaction(function(){
    // 执行上面设置的操作
});
// 处理死锁
DB::transaction(function(){
    // 这里还是一样,只是添加了第二个参数表示该表死锁时进行的最大尝试次数
},$maxTry);
// 数据库回滚
DB::rollBack();

查询构建器

获取所有行 get

$users=DB::table('user')->get();
// 可以像下面这样调用其中的字段值
foreach($users as $user){
    echo $user->name;
    echo $user->id;
}

获取一行 first

获取整行

$user=DB::table('user')->first();
echo $user->name;

获取一个字段 value

$user_names=DB::table('user')->value('user_name');

获取一列 pluck

$user_name=DB::table('user')->pluck('user_name');

设置返回列的数组索引

$user_name=DB::table('user')->pluck('user_name','user_id');

user_id必须是表中的字段。

组块结果集 chunk

记录数太多时,可以将所有记录数拆分成多个区块,针对这些区块区块进行小型的处理。

DB::table('user')->chunk($Number,function($anyName){
    // 这里的$anyName表示的是DB::table('user')->select()后获得的结果,可以像下面这样进行处理
    foreach($anyName as $key=>$value){
        // code...
    }
    // 如果想停止运行,那么就返回错误
    return false;
});

聚合函数

  • count
  • max
  • min
  • avg
  • sum

查询 select

指定返回字段

DB::table('user')->select('user_id','user_name')-get();

返回唯一结果 distinct

DB::table('user')->select('user_code')->distinct()->get();

使用SQL语句 raw

DB::table('user')->select(DB::raw("count(*) as number"))->get();

连接 join

这块我用的不多,暂且先放着。

联合 union

我退步了。。。。。。

限制条件 where

where接受三个参数,这三个参数分别是列名、操作符,要比较的值

$users=DB::table('user')->where("user_id","=","100")->first();

多条件查询

$users=DB::table('user')->where(array(
    ['user_id','=','100'],
    ['user_name','=','hello world']
))->get();

或 orwhere

$users=DB::table('user')
    ->where('user_id','=','100')
    ->orwhere('user_id','=','101')
    ->get();

whereBetween

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

whereNotBetween

whereIn

whereNotIn

whereNull

whereNotNull

whereDate

whereMonth

whereDay

whereYear

whereColumn

排序、分组、限定

排序 orderBy

// 第二个参数可以指定升序排序 asc 还是降序排列 desc
$users=DB::table('user')->orderBy('user_id','desc')->get();

按照日期进行排序 latest/oldest

注意,使用该内容时,该表内部一定要有 create_at 字段

对结果集进行随机排列 inRandomOrder

$randData=DB::table('user')
    ->inRandomOrder()
    ->get();

对结果集进行分组 having / havingRaw

$users=DB::table('user')
    ->groupBy('first_name')
    ->having('first_name','=','King')
    ->get();

skip / take 对应 offset / limit

条件查询 when

比较直观的说法可以是,在查询中可以根据外部条件确定查询条件:

DB::table('user')
    ->when(
        $situation,
        function($query){
            // 当$situation为true时进行执行
        },
        function($query){
            // 当$situation为false时进行执行
        }
    )
    ->get();

这样我们就可以在外部设置$situation的值,通过控制$query,来进行查询了。

插入数据 insert

DB::table('user')->insert(
    ['user_name'=>'trouble','emai'=>'trouble@i.am.in']
);

插入多组数据

DB::table('user')->insert(
    ['user_name'=>'trouble'],
    ['user_name'=>'i'],
    ['user_name'=>'am'],
    ['user_name'=>'in']
);

获取插入数据后的ID insertGetId

$id=DB::table('user')->insertGetId(
    ['user_name'=>'trouble i am in'],'user_id'
);

注意!如果不使用 insertGetId 的第二个参数指定表的主键名称的话,那么默认主键名称为 id

更新 update

DB::table('user')
    ->where('user_id',100)
    ->update(
        ['user_name'=>'trouble i am in']
    );

删除 delete

DB::table('user')
    ->where('user_id',100)
    ->delete();

分页 paginate

$users=DB::table('user')->paginate(10);

简单分页 simplePaginate

相比于上面的paginate,这里的简单分页仅仅提供上一页、下一页这样的作用。

$users=DB::table('user')->simplePaginate(10);

显示分页结果

要将分页的超链接显示在视图中,可以使用如下的形式:

假设控制器传递进来的参数格式如下:

$users=DB::table('user')->paginate(10);
return view('User.index',['users'=>$users]);
{{$users->links()}}

在链接中加入参数

{{$users->appends(['user_name'=>$user_name])->links()}}

视图渲染页面

vendor/laravel/framework/src/Pagination/resource/views/default.blade.php文件,修改该文件即可实现修改分页样式功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值