Laravel 多 where 并搜索
3


$size= (int)$request->size;
$page= (int)$request->page;
if(empty($page)) $page =1;
if(empty($size)) $size =10;
$ofsset = $size * ($page -1);
// var_dump($name);
$threatlistmodel = new ThreatList();

$total = $threatlistmodel->where(function($query) use ($data){
    $data['name'] && $query->where("name","like","%".$data['name']."%");
    isset($data['level']) && $query->where("level",$data['level']);
    isset($data['is_tb']) && $query->where("is_tb",$data['is_tb']);
    $data['end_at'] && $query->where("find_at","<=",$data['end_at'].' 23:59:59');
    $data['start_at'] && $query->where("find_at","=>",$data['start_at'].' 00:00:01');
    $query->where("is_state",1);
})->count();
//var_dump($total);
$list = $threatlistmodel->where(function($query) use ($data){
    $data['name'] && $query->where("name","like","%".$data['name']."%");
    isset($data['level']) && $query->where("level",$data['level']);
    isset($data['is_tb']) && $query->where("is_tb",$data['is_tb']);
    $data['end_at'] && $query->where("find_at","<=",$data['end_at'].' 23:59:59');
    $data['start_at'] && $query->where("find_at",">=",$data['start_at'].' 00:00:01');
    $query->where("is_state",1);
})->orderBy("id","desc")->offset($ofsset)->limit($size)->get()->each(function($item){
    $con_info = json_decode(unserialize($item->count_con),true);
    $item['ip_count'] = $con_info["total"];
    unset($item->count_con);

});
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 13
游离不2

可以了解一下when方法,会优雅很多。

3周前
Vckin

@deeka 谢谢您的意见,但是有些使用场景不一样!

3周前
laisxn
if(empty($page)) $page =1;
if(empty($size)) $size =10;

个人实在不建议这样简写,还有 英文逗号后面留个空格,连接符 . 前后空格,一些php编码规则看一下, 整个代码都看的舒服一些

3周前
游离不2

@Vckin 不客气。不过从你上面的代码看when完全可以接管

3周前

就你贴出来的代码来说 when 完全能满足你的需求,让代码更简洁美观易读

3周前

看到这串代码 我的强迫症一下就出来了 取值要用arrget或者dataget 不然有可能报未找到的下标 闭包的变量我会命名类名 数字之间的计算我会尽量用bc函数 并不是为了计算金钱 调用where 我会调用Model:query() 不然ide会报模型找不到where这样的方法 这该死的强迫症

3周前
Vckin

@罪人 @helone 受教受教 我在好好研究一下!

3周前
北冥
$size= (int)$request->input("size","1");

再说参数好像不必是 int 吧

3周前

这样去写,等到以后需要增加或者删减业务的时候不觉得麻烦么?为什么不在一个地方统一处理然后根据参数控制呢?
如果有10种情况,那岂不是要写10遍?有一天业务改了要改10遍

3周前

emmmmm
你这么写 你们老大不抽你么 代码可读性和维护性太差了啊 写个闭包 list count 的条件只写一次就行了

我宁愿 用if 判断 你这种 让别人过来怎么维护你的代码。

3周前
public static function searchCon(array $validated)
{
    return function ($query) use ($validated) {
        extract($validated);

        // 关键字搜索
        if (filled($keyword)) {
            $query->where('name', 'like', '%' . $keyword . '%');
        }

        // 状态筛选
        if (filled($status)) {
            $query->where('status', $status);
        }

        if (filled($type)) {
            $query->where('type', $type);
        }

        if (filled($pid)) {
            $query->where('pid', $pid);
        }
    };
}

抛砖引玉啦

    public function scopePage($query, $page = 1, $pageSize = 10)
    {
        return \Request::input('excel') == self::TO_EXCEL ? $query : $query->offset(($page - 1) * $pageSize)->limit($pageSize);
    }

分页的优化

public static function list(array $validated)
{
    $where = self::searchCon($validated);

    $data['list'] = self::where($where)
        ->with('labelNext')
        ->orderBy('order', 'desc')
        ->page($validated['page'], $validated['page_size'])
        ->get();

    $data['count'] = self::where($where)->count();

    return $data;
}
3周前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!