传递的参数1,必须是数组类型,给定字符串

问题描述 投票:0回答:1

我正在使用 Laravel 5.8,我创建了一个页面来查看存储在

media_library
表中的所有上传文件。

我得到的所有数据都是这样的:

public function __construct(MediaLibraryRepository $mediaLibraryRepoObject)
    {
        $this->mediaLibraryRepoObject = $mediaLibraryRepoObject;
    }

    public function index()
    {
        $res = $this->mediaLibraryRepoObject->select();
        $media = $res["media"];
        $files = $res["files"];
        $extensions = [
            'jpg', 'png', 'bmp', 'gif', 'jfif', 'mp4', 'mkv', 'flv', 'mov', 'avi', 'wmv', 'mp3', 'pdf', 'doc', 'docx', 'pptx', 'xls', 'xlsx', 'zip', 'rar'
        ];
        return view('admin.mediaLibrary.index', compact('media','files', 'extensions'));
    }

如您所见,我在这里调用了一个存储库,并在

index()
方法中调用了该存储库的
select()
方法,该方法位于此处:

public function select()
    {
        $media = MediaLibrary::where('med_dimension', 'full');

        if (request()->has('mediaType') && request('mediaType') != "")
            $media = $media->whereIn('med_extension', request('mediaType'));
        
        if (request()->has('fileName') && request('fileName') != "")
            $media = $media->whereIn('med_name', request('fileName'));

        $media = $media->latest()->paginate(15);

        $files = [];
        foreach ($media as $key=>$value) {
            $files[$key]['med_name'] = $value->med_name;
            $files[$key]['med_group'] = $value->med_group;
            $files[$key]['med_size'] = $value->med_size;
            $files[$key]['med_extension'] = $value->med_extension;

            foreach (MediaLibrary::where('med_group', $value->med_group)->get() as $val) {
                $files[$key]['path'][$val->med_dimension] = $val->med_path;
            }
        }
        return ["files"=>(object) $files,"media"=>$media];
    }

所以我需要在 Blade 上添加一个搜索表单来搜索文件名,因此我尝试了以下代码:

if (request()->has('fileName') && request('fileName') != "")
            $media = $media->whereIn('med_name', request('fileName'));

但是它给了我这个错误:

传递给 Illuminate\Database\Query\Builder::cleanBindings() 的参数 1 必须是数组类型,给定字符串,在

中调用

那么这里出了什么问题呢?我该如何解决这个问题?

这是我的表格:

<div class="row">
    <div class="col-md-4" style="padding-right: 0px !important;">
        <label for="mediaType">File type:</label>
        <select type="text" class="form-control select2" name="mediaType[]" multiple>
            <option value="">Select</option>
                @foreach($extensions as $ext)
                    <option value="{{ $ext }}"
                        @if(request()->has('mediaType') && request('mediaType') != "")
                            @foreach(request()->query('mediaType') as $f)
                                @if($ext == $f)
                                    selected
                                @endif
                            @endforeach
                        @endif
                    >
                    {{ $ext }}
                    </option>
                @endforeach
        </select>
    </div>
    <div class="col-md-4" style="padding-right: 0px !important;">
        <label for="mediaType">File name:</label>
            <input type="text" class="form-control" name="fileName" value="{{ request()->query('fileName') }}">
        </div>
        <div class="col-md-4" style="padding-top: 25px; padding-left: 0px !important;">
            <button class="btn btn-primary float-left">Search</button>
        </div>
    </div>
</div>  
php laravel laravel-5.8
1个回答
2
投票

根据 Laravel 文档

whereIn
方法验证是否包含给定列的值 在给定数组内:

$users = DB::table('users')
                    ->whereIn('id', [1, 2, 3])
                    ->get();

更改您的代码:

$media = $media->whereIn('med_name', request('fileName'));

至:

$media = $media->where('med_name', request('fileName'));
© www.soinside.com 2019 - 2024. All rights reserved.