将数组转换为Eloquent的params列表

时间:2016-02-13 15:34:38

标签: php arrays laravel eloquent

我试图使用Eloqunt avg功能。当我将列作为参数列表传递时,它可以工作;

$this->avg('column_two','column_one');

但是当我传入$array时,它并没有;

$this->avg($array);

这是一个dd(就像该数组的var_dump一样,所以你知道我在说什么;

array:6 [▼
  0 => "column_0"
  1 => "column_1"
  2 => "column_2"
  3 => "column_3"
  4 => "column_4"
  5 => "column_5"
]

我得到了一个非常奇怪的错误;​​

ErrorException in Grammar.php line 58:
strtolower() expects parameter 1 to be string, array given

这看起来像是一个基本的数组问题,但是如何将该数组转换为params列表呢?

我能做的最好的事情是implode;

$array = implode(',', $array);

但那只会返回一个SQL错误;

ERROR: column "example_0,example_1" does not exist

2 个答案:

答案 0 :(得分:0)

尝试 -

function quote($el){
  return '"'.$el.'"';
}

$quotedArr[] = array_map('quote', $array);
$paramStr = implode(',', $quotedArr);

$this->avg($paramStr);

答案 1 :(得分:0)

您正在寻找PHP call_user_func_array()功能。

您可以这样使用它:

$result = call_user_func_array([$this, 'avg'], $array);

第一个参数是callable。第二个参数是要发送到callable的参数数组。

话虽如此,我不确定您的代码是否按预期方式运行。看一下code,似乎avg()方法首先只接受一列。你确定你得到了你想要的东西吗?