Laravel 5.6 里面的when用法

$name = $request->get('name');                              //活动标题
$start_time = $request->get('start_time');                  //活动开始时间
$user_name = $request->get('user_name');                    //发布者

$limit = (int) $request->get('limit', 15);
$offset = (int) $request->get('offset', 0);

$data=ActiveJieSuan::with(['user' => function ($query) {$query->select('id','name');},
   'active'=> function ($query) {$query->select('id','name','start');}])
   ->when($name, function ($query) use ($name) {
      return $query->whereHas('active', function ($query) use ($name) {
         return $query->where('name', 'like', '%'.$name.'%');
      });
   })
   ->when($user_name, function ($query) use ($user_name) {
      return $query->whereHas('user', function ($query) use ($user_name) {
         return $query->where('name', 'like', '%'.$user_name.'%');
      });
   })
   ->when($start_time, function ($query) use ($start_time) {
      return $query->whereHas('active', function ($query) use ($start_time) {
         return $query->where('start', '>=', $start_time);
      });
   })
   ->limit($limit)
   ->offset($offset)
   ->orderBy('id', 'desc')
   ->paginate()->toArray();

 

源代码路径: D:\phpStudy\WWW\faceke\vendor\laravel\framework\src\Illuminate\Database\Concerns\BuildsQueries.php

 

public function when($value, $callback, $default = null)
 { 
    if ($value) { return $callback($this, $value) ?: $this; 
    } elseif ($default) {
    return $default($this, $value) ?: $this; 
   } return $this; 
}

 

when会判断第一个参数的真与假,如果是真,则执行第一个callback,如果是假,
则执行默认的方法,我的那段代码就只设置了真的时候需要执行的代码,因为条件有三种,
不只有两种。这样的话可以使代码易读性更好,当然也可以拆分子句,
但是when这个用法相对更赞。

如上用法直接用关联表中的字段作为搜索条件就更赞了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值