无法在laravel app中保存资源传递给Illuminate \ Database \ Grammar :: parameterize()的参数1必须是数组类型,给定null

时间:2015-01-09 21:04:23

标签: php laravel

对于我的laravel应用程序的其中一个资源,我将字段留空时会出错:

Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, null given, called in /var/www/html/pfladmin/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php on line 309 and defined

我在堆栈跟踪中查找了一些 编写的代码(而不是来自laravel框架),而唯一一个是资源的控制器,它指出了我到下一行。

$servicesFacilities =
DB::table('services_facilities')->whereIn('services_facilities_id',
Input::get('services_facilities'))->lists('name');

我知道这与我传递一个NULL有关,这会导致整个堆栈跟踪出现问题,但为什么会发生这种情况发生在其他字段不允许发生的情况下留空了?

1 个答案:

答案 0 :(得分:3)

  

我知道这与我传递一个NULL有关,这会导致整个堆栈跟踪出现问题,但为什么会发生这种情况发生在其他字段不允许发生的情况下留空了?

我无法肯定地说,但我的猜测是你没有使用whereIn查询中的其他字段。

$servicesFacilities =
DB::table('services_facilities')->whereIn('services_facilities_id',
    Input::get('services_facilities')
)->lists('name');

whereIn方法期望第二个参数是一个数组。即,像这样的东西

DB::table('services_facilities')->whereIn('services_facilities_id',
    [1,2,3]
)

您的错误消息是抱怨某些内容不是数组

  

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

快速修复就像是

//$ids = Input::get('services_facilities') ? Input::get('services_facilities') : [];    
$ids = Input::get('services_facilities', []) 
...
DB::table('services_facilities')->whereIn('services_facilities_id',
    $ids
)