Non è corretto credere che il Database \ Query \ Builder :: groupBy() il metodo accetta gli array come argomenti. Attualmente accetta solo il numero N di argomenti stringa.
momento in cui scriviamo, l'attuale versione del quadro laravel è: v4.2.4, e il codice per il Database \ metodo di query \ Builder :: groupBy() è il seguente:
/**
* Add a "group by" clause to the query.
*
* @param dynamic $columns
* @return \Illuminate\Database\Query\Builder|static
*/
public function groupBy()
{
$this->groups = array_merge((array) $this->groups, func_get_args());
return $this;
}
Se ci pensi, func_get_args() restituisce una matrice di tutte le colonne che potrebbero essere state inserite come stringhe. Pertanto, atteso ingresso di questa funzione è:
$builder->groupBy('column1', 'column2', ...);
La risultante struttura $ this-> gruppi sull'oggetto builder dovrebbe essere un array di stringhe, in questo modo:
['column1','column2']
Tuttavia, se nutriti una matrice nel metodo di cui sopra, in questo modo:
$builder->groupBy(['column1','column2']);
la proprietà $ this-> gruppi sarebbe finire con un array nidificato che assomiglia a questo:
[['column1','column2']]
Il resto del framework del generatore di query si aspetta che la proprietà $ builder-> groups sia una matrice di stringhe non annidata. Pertanto, quando il framework tenta di raggruppare e racchiudere i nomi delle tabelle nel proprio formato di escape (ogni motore di database ha un operatore di escape diverso), prova a racchiudere una matrice invece di una stringa e si ottiene il proprio errore.
La riga di errore offendente è la riga 49 in Database \ Grammar :: wrap().
Se dovessimo modificare il database \ Query \ Builder :: groupBy() per renderlo accettare array, ci sarebbe riscriverla qualcosa di simile al seguente:
public function groupBy()
{
$args = func_get_args();
foreach($args AS $arg)
{
$arg = (is_array($arg)) ? $arg:[$arg];
$this->groups = array_merge((array) $this->groups, $arg);
}
return $this;
}
Questo metodo accetta un array in qualsiasi indice dei parametri.
funziona per me, hai trovato il tuo problema? –