【问题标题】:Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given传递给 Illuminate\Database\Grammar::parameterize() 的参数 1 必须是数组类型,给定字符串
【发布时间】:2018-03-22 07:49:45
【问题描述】:

清楚地表明 $file_ids 是数组类型但仍然出现此错误,我使用不同的函数来了解变量的数据类型,例如 gettype() 它也返回数组。请帮助我摆脱这个头痛。 提前致谢。

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']);
    }

【问题讨论】:

标签: php laravel


【解决方案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;
}

【讨论】:

  • 我在任何地方都在使用 $file_ids 但仍然遇到同样的错误。
  • 您的$file_ids 数组现在到底包含什么?
  • 它包含视图中检查文件的ID。
  • 是的,100% 确定 $file_ids 包含有效值。
  • 这只是猜测-但是当您将$link_id = $this->makeDownloadLink($file_ids, $_POST['password']); 更改为$link_id = 'sample'; 时,您仍然收到错误吗?也许错误例如在 makeDownloadLink 方法中
【解决方案2】:

检查这段代码

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

get() 替换为find()

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

【讨论】:

    猜你喜欢
    • 2019-08-23
    • 2021-08-19
    • 2021-02-08
    • 2020-10-15
    • 1970-01-01
    • 2021-12-24
    • 2021-06-30
    • 2019-09-18
    • 2020-10-29
    相关资源
    最近更新 更多