2月 4, 2021 - laravel, mysql    Laravel 中某一个字段是逗号隔开时,查询其多选已关闭评论

Laravel 中某一个字段是逗号隔开时,查询其多选

想要前端传一个参数表示多选查询(platforms字段中既有facebook又有aiqiyi):示例前端传过来platforms:facebook,aiqiyi

实现方式:使用mysql自带的:FIND_IN_SET方法即可

代码如下:

public function index(Request $request)
{
    $property_id = $request->property_id;
    $sortBy = $request->sortBy;
    $sortType = $request->sortType;
    $name = $request->name;
    $description = $request->description;
    $all = $request->all;
    $platforms = $request->platforms;
    $status = $request->status;
    $base_validation = $this->basic_validation($request,$property_id);
    if(!empty($base_validation)) {
        return $this->responseErrorWithMessage($base_validation);
    }
    $size = $request->size ?? 10;
    $video_list = Playlist::where('property_id', $property_id)
        ->when($sortBy && $sortType, function ($q) use ($sortBy, $sortType) {
            $q->orderBy($sortBy, $sortType);
        })
        ->when($name,function($q) use($name){
            $q->where('name','like','%'.$name.'%');
        })
        ->when($description,function($q) use($description){
            $q->where('description','like','%'.$description.'%');
        })
        ->when($all,function($q) use($all){
            return $q->where(function ($query) use ($all) {
                        $query->orWhere('name', 'like', '%'.$all.'%')
                        ->orWhere('description', 'like', '%'.$all.'%');
            });
        })
        ->when($platforms,function($q) use($platforms){
            return $q->where(function ($query) use ($platforms) {
                $platforms = explode(',',$platforms);
                if (count($platforms)) {
                    foreach ($platforms as $platform) {
                        $query->orWhereRaw('FIND_IN_SET(?,platforms)',$platform);
                    }
                }

            });
        })
        ->when(!is_null($status),function($q) use($status){
            $q->whereIn('status',explode(',', $status));
        })
        ->paginate($size);
    return $this->responseSuccessWithExtrasAndMessage(PlaylistResource::collection($video_list)->resource);


}

 

 

评论被关闭。