Laravel find in set排序实例_php实例

来源:脚本之家  责任编辑:小易  

Laravel的主要技术特点:1、Bundle是Laravel的扩展包组织形式或称呼。Laravel的扩展包仓库已经相当成熟了,可以很容易的帮你把扩展包(bundle)安装到你的应用中。你可以选择下载一个扩展包(bundle)然后拷贝到bundles目录,或者通过命令行工具“Artisan”自动安装。2、在Laravel中已经具有了一套高级的PHP ActiveRecord实现-Eloquent ORM。它能方便的将“约束(constraints)”应用到关系的双方,这样你就具有了对数据的完全控制,而且享受到ActiveRecord的所有便利。Eloquent原生支持Fluent中查询构造器(query-builder)的所有方法。3、应用逻辑(Application Logic)可以在控制器(controllers)中实现,也可以直接集成到路由(route)声明中,并且语法和Sinatra框架类似。Laravel的设计理念是:给开发者以最大的灵活性,既能创建非常小的网站也能构建大型的企业应用。4、反向路由(Reverse Routing)赋予你通过路由(routes)名称创建链接(URI)的能力。只需使用路由名称(route name),Laravel就会自动帮你创建正确的URI。这样你就可以随时改变你的路由(routes),Laravel会帮你自动更新所有相关的链接。5、Restful控制器(Restful Controllers)是一项区分GET和POST请求逻辑的可选方式。比如在一个用户登陆逻辑中,你声明了一个get_login()的动作(action)来处理获取登陆页面的服务;同时也声明了一个post_login()动作(action)来校验表单POST过来的数据,并且在验证之后,做出重新转向(redirect)到登陆页面还是转向控制台的决定。6、自动加载类(Class Auto-loading)简化了类(class)的加载工作,以后就可以不用去维护自动加载配置表和非必须的组件加载工作了。当你想加载任何库(library)或模型(model)时,立即使用就行了,Laravel会自动帮你加载需要的文件。7、视图组装器(View Composers)本质上就是一段代码,这段代码在视图(View)加载时会自动执行。最好的例子就是博客中的侧边随机文章推荐,“视图组装器”中包含了加载随机文章推荐的逻辑,这样,你只需要加载内容区域的视图(view)就行了,其它的事情Laravel会帮你自动完成。8、反向控制容器(IoC container)提供了生成新对象、随时实例化对象、访问单例(singleton)对象的便捷方式。反向控制(IoC)意味着你几乎不需要特意去加载外部的库(libraries),就可以在代码中的任意位置访问这些对象,并且不需要忍受繁杂、冗余的代码结构。9、迁移(Migrations)就像是版本控制(version control)工具,不过,它管理的是数据库范式,并且直接集成在了Laravel中。你可以使用“Artisan”命令行工具生成、执行“迁移”指令。当你的小组成员改变了数据库范式的时候,你就可以轻松的通过版本控制工具更新当前工程,然后执行“迁移"指令即可,好了,你的数据库已经是最新的了!10、单元测试(Unit-Testing)是Laravel中很重要的部分。Laravel自身就包含数以百计的测试用例,以保障任何一处的修改不会影响其它部分的功能,这就是为什么在业内Laravel被认为是最稳版本的原因之一。Laravel也提供了方便的功能,让你自己的代码容易的进行单元测试。通过Artisan命令行工具就可以运行所有的测试用例。11、自动分页(Automatic Pagination)功能避免了在你的业务逻辑中混入大量无关分页配置代码。方便的是不需要记住当前页,只要从数据库中获取总的条目数量,然后使用limit/offset获取选定的数据,最后调用‘paginate'方法,让Laravel将各页链接输出到指定的视图(View)中即可,Laravel会替你自动完成所有工作。Laravel的自动分页系统被设计为容易实现、易于修改。虽然Laravel可以自动处理这些工作,但是不要忘了调用相应方法和手动配置分页系统哦!下面来用一些小例子加以解释说明:微服务和程序接口 Lumen是一个由laravel衍生的专注于精简的微框架。它高性能的程序接口可让你更加简单快速的开发微型项目。Lumen使用最小的配置集成了所有laravel的重要特性,你可以通过将代码复制到laravel项目的方式将完整的框架迁移过来。php $app->get('/',function(){ return view('lumen');});app->post('framework/{id}',function($framework){$this->dispatch(new Energy($framework));});HTTP路径 Laravel拥有类似于Ruby on Rails的,快速、高效的路由系统。它可以让用户通过在浏览器上输入路径的方式让应用程序的各部分相关联。HTTP中间件 Route:get('/',function(){ return 'Hello World';});应用程序可受到中间件的保护—中间件会处理分析和过滤服务器上的HTTP请求。你可以安装中间件,用于验证注册用户,并避免如跨站脚本(XSS)或其它的安全状况的问题。php namespace App\\Http\\Middleware;use Closure;class OldMiddleware { public function handle($request,Closure$next){ if($request->input('age')){ return redirect('home');} return$next($request);} } 缓存 你的应用程序可得到一个健壮的缓存系统,通过对其进行调整,可以让应用程序的加载更加快速,这可以给你的用户提供最好的使用体验。Cache:extend('mongo',function($app){ return Cache:repository(new MongoStore);});身份验证 安全是至关重要的。Laravel自带对本地用户的身份验证,并可以使用“remember”选项来记住用户。它还可以让你例如一些额外参数,例如显示是否为活跃的用户。if(Auth:attempt(['email'=>$email,'password'=>$password,'active'=>1],$remember)){/The user is being remembered.} 各种集成 Laravel Cashier可以满足你要开发支付系统所需要的一切需求。除此之外,它还同步并集成了用户身份验证系统。所以,你不再需要担心如何将计费系统集成到开发当中了。user=User:find(1);user->subscription('monthly')->create($creditCardToken);任务自动化 Elixir是一个可让我们使用Gulp定义任务的Laravel程序接口,我们可以使用Elixir定义可精简CSS 和JavaScript的预处理器。elixir(function(mix){ mix.browserify('main.js');});加密 一个安全的应用程序应该做到可把数据进行加密。使用Laravel,可以启用OpenSSL安全加密算法AES-256-CBC来满足你所有的需求。另外,所有的加密值都是由检测加密信息是否被改变的验证码所签署的。use Illuminate\\Contracts\\Encryption\\DecryptException;try {$decrypted=Crypt:decrypt($encryptedValue);} catch(DecryptException$e){/} 事件处理 应用程序中事件的定义、记录和聆听都非常迅速。EventServiceProvider事件中的listen包含记录在你应用程序上所有事件的列表。protected$listen=['App\\Events\\PodcastWasPurchased'=>['App\\Listeners\\EmailPurchaseConfirmation',],];分页 在Laravel中分页是非常容易的因为它能够根据用户的浏览器当前页面生成一系列链接。php namespace App\\Http\\Controllers;use DB;use App\\Http\\Controllers\\Controller;class UserController extends Controller { public function index(){$users=DB:table('users')->paginate(15);return view('user.index',['users'=>$users]);} } 对象关系化映射(ORM)Laravel包含一个处理数据库的层,它的对象关系化映射被称为Eloquent。另外这个也适用于PostgreSQL。users=User:where('votes','>',100)->take(10)->get();foreach($users as$user){ var_dump($user->name);} 单元测试 单元测试的开发是一个耗费大量时间的任务,但是它却是保证我们的应用程序保持正常工作的关键。Laravel中可使用PHPUnit执行单元测试。use Illuminate\\Foundation\\Testing\\DatabaseTransactions;class ExampleTest extends TestCase { public function testBasicExample(){$this->visit('/')->see('Laravel 5')->dontSee('Rails');} } 待办事项清单 Laravel提供在后台使用待办事项清单(to do list)处理复杂、漫长流程的选择。它可以让我们异步处理某些流程而不需要用户的持续导航。Queue:push(new SendEmail($message));www.zgxue.com防采集请勿采集本网。

做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列。

firstOrCreate在未根据条件查询到数据后回向数据库发送insert命令创建一条数据 firstOrNew并不会真实的在数据库中插入一条新的记录,而是创建一个新记录的Eloquent对象,并返回,置于需不需要将这个新对象

例如,用户状态有四种:

要模型新增或修改条数据数据库要建立模型实例并调用 save 即 新增:$user=new User;user->name='John';user->save();修改:$user=User:find(一);user->name='John';user->save()

=>未激活;1=>正常;2=>禁用;3=>软删除

如果想通过 id 直接获取 Person 对象,可以使用 find 方法: person=DB:table('person')->find($id);Blade 中可以使用@for、@foreach 或@forelse 等遍历对象集合,再显示对象的属性值: forelse($persons

现在的需求是,我要按照:正常->未激活->禁用->删除;这个顺序来进行排序,同时按照注册时间降序,网上查了很多资料,国内提到这个的很少,在stackOverFlow上找到了答案!

find-object or empty ex: p=Project:find($id);if(empty($p)){ dd('project is empty');} get->返回object,透过count 方法判断 ex: p=Project:where('user_id','=',$userid)->get();if($p

先上解决方案:

零、什么是 Eloquent Eloquent 是 Laravel 的 'ORM',即 'Object Relational Mapping',对象关系映射。ORM 的出现是为了帮我们把对数据库的操作变得更加地方便。Eloquent 让一个 'Model类' 对应

public function index($customer_type = null) { $search = request('search'); $perPage = request('perPage') ? request('perPage') : 10; $customer_type = $customer_type ? $customer_type : request('customer_type'); // \DB::enableQueryLog(); $data = Customer::select(['id', 'email', 'user_name', 'nick_name', 'status', 'phone', 'create_time']) ->where('customer_type', '=', $customer_type) ->where(function ($query) use ($search) { if ($search) { $query->where('user_name', 'like binary', '%' . $search . '%') ->orWhere('nick_name', 'like binary', '%' . $search . '%') ->orWhere('phone', 'like binary', '%' . $search . '%') ->orWhere('email', 'like binary', '%' . $search . '%'); } }) ->orderByRaw("FIELD(status, " . implode(", ", [1, 2, 0, 3, 4]) . ")") ->orderBy('create_time', 'desc') ->paginate($perPage); // $query = \DB::getQueryLog(); // dd($data); //追加额外参数,例如搜索条件 $appendData = $data->appends(array( 'search' => $search, 'perPage' => $perPage, )); return view('admin/customer/customerList', compact('data'));}

打印出来的sql语句如下:

array:2 [▼ => array:3 [▼“query” => “select count(*) as aggregate from customer where customer_type = ?”“bindings” => array:1 [▼ => “1”]“time” => 2.08] => array:3 [▼“query” => “select id, email, user_name, nick_name, status, phone, create_time from customer where customer_type = ? order by FIELD(status, 1, 2, 0, 3, 4), create_time desc limit 10 offset 0”“bindings” => array:1 [▼ => “1”]“time” => 1.2]]

参考了以下链接:

https://stackoverflow.com/questions/42068986/laravel-weird-behavior-orderbyrawfield

https://stackoverflow.com/questions/34244455/how-to-use-not-find-in-set-in-laravel-5-1

https://stackoverflow.com/questions/35594450/find-in-set-in-laravel-example/35594503

find_in_set 复杂应用:

public function get_teacher_list($timeType, $name, $perPage = 10, $personality = 0, $teachingStyle = 0, $ageType = 0){ // \DB::enableQueryLog(); $result_data = DB::table('teacher_info as ti') ->select('ti.*') ->join('customer', 'customer.id', '=', 'ti.customer_id') ->where(function ($query) use ($personality) { if (trim($personality)) { $query->whereRaw("find_in_set($personality,ti.label_ids)"); } }) ->where(function ($query) use ($teachingStyle) { if (trim($teachingStyle)) { $query->whereRaw("find_in_set($teachingStyle,ti.label_ids)"); } }) ->where(function ($query) use ($ageType) { if (trim($ageType)) { $ageType = explode('-', $ageType); $query->whereRaw("DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 between $ageType[0] and $ageType[1]"); } }) ->where(function ($query) use ($timeType) { //1本周,2下周 if ($timeType == 1) { $query->where('ti.can_appointment_1', 1); } elseif ($timeType == 2) { $query->where('ti.can_appointment_2', 1); } else { $query->where('ti.can_appointment_1', '>', 0) ->orWhere('ti.can_appointment_2', '>', 0); } }) ->where(function ($query) use ($name) { if (trim($name)) { $query->where('ti.chinese_name', 'like', '%' . $name . '%') ->orWhere('ti.english_name', 'like', '%' . $name . '%'); } }) ->where('ti.status', 1) ->orderBy('ti.total_teach_num', 'desc') ->orderBy('ti.total_star_num', 'desc') ->orderBy('ti.satisfaction', 'desc') ->orderBy('ti.comment_num', 'desc') ->orderBy('ti.english_name', 'asc') ->paginate($perPage); // dd($result_data, \DB::getQueryLog()); return $result_data;}

专门拿出来看一下:

$ids = array(1,17,2);$ids_ordered = implode(',', $ids);$items = User::whereIn('id', $ids) ->orderByRaw(DB::raw("FIELD(id, $ids_ordered)")) ->get();

以上这篇Laravel find in set排序实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持真格学网。

1.用 php artisan make:model NAME 来创建 model 2.在需要调用model的脚本开头,写 use App/NAME,比如你要用laravel5 的默认user model,就要 use App/User;内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 对laravel in 查询的使用方法详解
  • php解析html类库simple_html_dom的转码bug
  • codeigniter使用phpcms模板引擎
  • php结合ajax实现手机发红包的案例
  • laravel框架控制器的request与response用法示例
  • thinkphp3.2.3实现分页的方法详解
  • php面向对象中的魔术方法中文说明
  • yii编程开发常见调用技巧集锦
  • ioncube_loader_win_5.2.dll的错误解决方法
  • php session文件独占锁引起阻塞问题解决方法
  • phpstudy2018安装教程及本地服务器的配置方法
  • laravel 模型调用find方法出错怎么回事
  • laravel 的 RESTful 控制器的路由规则是怎样的
  • 为什么说laravel比thinkphp好?laravel相比thinkphp有哪些优势
  • laravel wherein怎么用?
  • laravel的firstOrCreate和firstOrNew有啥不同啊
  • laravel session:save有什么用
  • 请教laravel view 怎么显示 controller 中传递的对象值
  • 怎么判断 laravel的model 的数据库为空
  • Eloquent 怎么实现事务
  • laravel怎么把对象转换为数组
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程对laravel in 查询的使用方法详解php解析html类库simple_html_dom的转码bugcodeigniter使用phpcms模板引擎php结合ajax实现手机发红包的案例laravel框架控制器的request与response用法示例thinkphp3.2.3实现分页的方法详解php面向对象中的魔术方法中文说明yii编程开发常见调用技巧集锦ioncube_loader_win_5.2.dll的错误解决方法php session文件独占锁引起阻塞问题解决方法phpstudy2018安装教程及本地服务器的配置方法php获取数组长度的方法(有实例)微信公众平台实现获取用户openid教你如何使用php session使用php生成二维码的两种方法(带php发送get、post请求的6种方法简php中把stdclass object转array的微信公众平台网页授权获取用户基laravel框架数据库curd操作、连贯php删除数组中空值的方法介绍php从数组中删除元素的四种方法实php文件系统管理(实例讲解)利用php实现一周之内自动登录存储机制(cphp 实现收藏功能的示例代码thinkphp中u方法加密传递参数功能示例codeigniter生成静态页的方法laravel框架自定义验证过程实例分析详解thinkphp中的volist标签centos下搭建php环境与wordpress博客程序yii 2.0在grid中格式化时间方法示例
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved