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 方法可以确定查询条件得结果是否存在之外,还可以使用exists和doesntExist方法: 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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |