[不懂就问] 关于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
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案
$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年前 评论

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