[不懂就问] 关于mysql IF 在laravel中得查询使用

背景

  • 遇到了一个很奇怪得场景,不知道大家常见不常见,一个参数如果存在就得作为查询条件。

问题详细描述

  • 例:单纯例子,可能各位大佬也不会有这样得场景,请帮我看看
if (isset($userId)) {
    Users::where('id', $userId)->get();
}

Users::get();
  • 例2:我现在得写法是
$userId = '值' ?? 0;
Users::whereRaw('IF('.$userId.'=0, 1, id='.$userId.')')->get();

满,憨的,各位有什么好的写法吗…

  • ps: 因我现在的常见需要这样查询的变量蛮多的,也就是一个查询可以需要挂三个这样的条件,if判断会很麻烦…
it_cwc
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案
$model = new User();

if(isset($user_id) && $user_id){
   $model->where(['user_id' => $user_id]);
}

$model->get();

或者用when也行,具体自己看文档

2年前 评论
it_cwc (楼主) 2年前
讨论数量: 4
$model = new User();

if(isset($user_id) && $user_id){
   $model->where(['user_id' => $user_id]);
}

$model->get();

或者用when也行,具体自己看文档

2年前 评论
it_cwc (楼主) 2年前
Class User Extends Model
{
    public function scopeUser($query, $user_id)
    {
        if ($user_id)
            return $query->where('user_id', $user_id);

        return $query;
    }
}

User::user($user_id)->get();
2年前 评论
it_cwc (楼主) 2年前
    User::when(isset($user_id), function ($query) use ($user_id) {
            return $query->where('id', $user_id);
        })
        ->get();
2年前 评论
Jourdon

when的写法 一看就明白咋回事

其它方法,可以要理解半天,

自己写的代码,一个星期后都不知道是写的是啥意思,大家都懂

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!