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

时间:2017-10-10 19:38:07

标签: php laravel

它清楚地表明$ file_ids是数组类型但仍然得到这个错误,我使用不同的函数来知道变量的数据类型,如gettype()它也返回array.please帮助我摆脱这个头痛。 提前谢谢。

public function getFilesForLink(Request $request)
{
 $file_ids = array();
    $ids = $request->input('selected_file');
    if (count($ids) > 0) {
        foreach ($ids as $id => $value) {
            $file_ids[] = base64_decode($value);
        }
    }
    $link_id = $this->makeDownloadLink($file_ids, $_POST['password']);
    if ($_POST['via'] == 'Email') {
        $files = File::find($file_ids);
        foreach ($files as $name) {
            $files_name[] = $name->name;
        }
        $this->sendEmail($files_name, $link_id, $_POST['recipient'], 
     $_POST['subject'], $_POST['body']);
    }

2 个答案:

答案 0 :(得分:1)

在一个地方,您使用的是$file_ids,而在其他地方$files_ids,请确保您使用的是相同的变量。

此外,您确定$file_ids阵列中有有效值吗?

查看评论的问题是:

$downloadLink->file_ids = $file_ids;

makeDownloadLink方法内。

你正在做这样的事情:

if (count($file_ids) > 1) { 
   $downloadLink->file_ids = implode(',', $file_ids); 
} 
$downloadLink->file_ids = $file_ids;

,当$file_ids为数组时,这将失败。您应该像这样添加else

if (count($file_ids) > 1) { 
   $downloadLink->file_ids = implode(',', $file_ids); 
} 
else {
   $downloadLink->file_ids = $file_ids;
}

答案 1 :(得分:0)

检查这段代码

$files = File::get($file_ids);

get()替换为find()

$files = File::find($file_ids);