laravel - 查询构造器

获取数据

1,从数据表中获取所有行

<?php

class UserController extends Controller{

       public function index(){

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

      }

}

从数据表中获取一行数据你可以使用first方法。该方法返回一个stdclass对象

$user = DB::table("users")->where(“name”,"John")->first()

如果不需要正行数据,则可以使用value方法从记录中获取单个值。该方法直接返回该字段得值:

$email = DB::table(‘users‘)->where("name","John")->value("email");

获取一列得值,则可以使用pluck方法。在下面得例子中,我们将获取角色表中得标题得集合

$titles = DB::table("roles")->pluck("title");

foreach($titles as $title){

       echo $title;  

}

你还可以在返回得集合中指定字段得自定义键值:

$roles = DB::table("roles")->pluck("title","name")

foreach($roles as $name=>$title){

            echo $title;

}

2,分块结果

如果你需要处理上千条数据库记录。你可以考虑使用 chunk 方法。该方法一次获取结果集得一小块,并将其传递给 闭包 函数进行处理。该方法在 Artisan命令 编写数千条处理数据得时候非常有用。力图我们可以将全部表数据切割成一次处理100条记录得一小块:

DB::table("users)->orderBy("id")->chunk(100,function($users){

          foreach($users as $user){

          }

})

你可以通过在 闭包 中返回 false 来终止继续获取分块结果:

DB::table(‘users‘)->orderBy(‘id‘)->chunk(100,function(){

        return false;

})

聚合

查询构造器还提供了各种聚合方法,比如count 、max 、min 、 avg 还有 sum。 你可以在构造查询后调用任何方法:

$user = DB:table("users")->count():

$price = DB::table(‘orders‘)->max("price");

当然,你也可以将这些聚合方法和其他得查询语句结合:

$price = DB::table(‘orders‘)->where("finalized",1)->avg(‘price‘);

3,判断记录是否存在

除了count 方法可以确定查询条件得结果是否存在之外,还可以使用existsdoesntExist方法:

return DB::table(‘orders‘)->where("finalized",1)->exists();

return DB::table("orders")->where(‘finalized‘,1)->doesntExist();

selects 语句

指定一个select语句

当然你可能并不总是希望从数据表中获取所有列。使用 select  方法,你可以自定义一个 select 查询语句来查询指定的字段:

$users = DB::table(‘users‘)->select("name","emal as user_email ")->get();

distinct 方法会强制让查询返回得结果不重复:

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

如果你已经有了一个查询构造器实例,并且希望在现有得查询语句中加入一个字段,那么你可以使用addSelect方法

$query = DB::table(‘users‘)->select(‘name‘);

$users = $query->addSelect(‘age‘)->get();

4,原生表达式

有时候你可能需要在查询中使用原生表达式。你可以使用DB:raw创建一个原生表达式:

$users = DB::table(‘users‘)

              ->select(DB::raw(‘count(*) as user_count,status ’))

              ->where(‘status‘,‘<>‘,1)

               ->groupBy("status")

               ->get();

注:原生表达式将会被当做字符串注入到查询中,因此你应该小心使用,避免创建SQL注入得漏洞

原生方法

可以使用以下方法代替 DB::raw ,将原生表达式插入查询得各个部分。

selectRow 方法可以代替 select(DB::raw(...))。该方法得第二个参数是可选项,值是一个绑定参数得数组:

$order = DB::table(‘orders‘)

               ->selectRaw(‘price * ? as price_with_tax ‘,[1.0825])

               ->get();

whereRaw/orWhereRaw

whereRaw 和 orWhereRaw 方法将原生得where

注入到你得查询中。这两个方法得第二个参数还是可选项,值还是绑定参数得数组:

$orders = DB::table(‘orders‘)

                ->whereRaw(‘ price > IF(state = "TX",?,100) ‘,[200] )

                ->get();

注:数据转化  

       把数据转为数组  toArray()

       把数据转为json   toJson()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


laravel的dd函数不生效怎么办
看不懂laravel文档咋办
安装laravel框架出现command怎么办
Laravel开发API怎么使用事务
laravel怎么构建复杂查询条件
laravel如何实现防止被下载
为什么laravel比yii火
一些常见的Laravel定时任务不运行的问题
laravel用路由有什么好处
composer无法安装laravel怎么办
laravel现在还用吗
laravel怎么替换主键id
laravel的appurl有什么用
如何修改Laravel的报错输出形式
laravel怎么避免foreach查表
laravel怎样操作数据库
laravel怎么截取字符串
laravel 是国内的吗
laravel怎么设置请求头
浅析Laravel社区Redis组件报错的问题和解决方法