Dao\Func\Group_Concat
-
Redirected from Group_concat
class ITRocks\Framework\Dao\Func\Group_Concat
Introduction
Représente une fonction de concaténation des valeurs d’une propriété dans plusieurs objets dans le cadre d’accès au lien de données.
L’utilisation de cette fonction vous permet, dans le cas d’un regroupement de sous-objets lors de l’appel à Dao::select, de concaténer les valeurs.
Exemple d’utilisation
Prenons deux classes Order pour une commande, et Line pour une ligne de commande. Une commande va comporter plusieurs lignes.
Dans la lecture des données ci-dessous, on va ne retourner qu’une ligne résultat pour l’ensemble des lignes de chaque commande de 2017, en concaténant le code article contenu :
use Bappli\Bappli\Sales\Order; use ITRocks\Framework\Dao; use ITRocks\Framework\Dao\Func; $data = Dao::select( Order::class, ['number', 'lines.item.code' => Func::groupConcat()], ['date' => '2017%'], Dao::groupBy('number') ); foreach ($data->getRows() as $row) { echo $row->getValue('number') . ' : ' . $row->getValue('lines.item.code') . BRLF; }
On aura en résultat un affichage ressemblant à :
17001 : P1,P4,P8 17002 : P1,P3
Note : l’écriture
Func::groupConcat()
est un raccourci pournew Group_Concat()
, et lui est totalement équivalent.Paramètres
Les paramètres optionnels suivants sont disponibles pour une utilisation sur des cas particuliers :
Column|string $column
Permet d’appliquer
Group_Concat
sur une fonction plutôt que sur une valeur de propriété.
On peut également forcer le chemin d’une autre propriété.Modifiez cette partie de l’exemple ci-dessus :
$data = Dao::select( Order::class, [ 'number', 'lines.item.code' => Func::groupConcat(Func::concat(['lines.item.code', 'lines.item.name'])) ], ['date' => '2017%'], Dao::groupBy('number') );
Le résultat comportera le code et le nom de chaque article, et non plus seulement son code :
17001 : P1 Nom article 1,P4 Nom article 4,P8 Nom article 8 17002 : P1 Nom article 1,P3 Nom article 3
string $separator
Le séparateur pour la concaténation est une virgule par défaut. Vous pouvez ici demander un autre séparateur.
Modifiez cette partie de l’exemple ci-dessus :
$data = Dao::select( Order::class, ['number', 'lines.item.code' => Func::groupConcat(null, ' - ')], ['date' => '2017%'], Dao::groupBy('number') );
On aura en résultat un affichage ressemblant à :
17001 : P1 - P4 - P8 17002 : P1 - P3
Autres propriétés de Group_Concat
Vous pouvez préparer un objet
Group_Concat
en modifiant les propriétés$column
et$separator
, qui peuvent être initialisés comme paramètres du constructeur ou altérés par la suite.
Ces propriétés peuvent également être paramétrées :boolean $distinct
Par défaut on ne liste que les valeurs distinctes. Vous pouvez mettre cette propriété à
false
pour répéter les valeurs identiques dans plusieurs objets.Par exemple :
$group_concat = Func::groupConcat(); $group_concat->distinct = false; $dao = Dao::select( Order::class, ['number', 'lines.item.code' => $group_concat], ['date' => '2017%'], Dao::groupBy('number') );
string[] $order_by
Pour trier les données regroupées, indiquer ici les chemins de données pour le tri.
Par exemple :
$group_concat = Func::groupConcat(Func::concat(['lines.item.code', 'lines.item.name'])); $group_concat->order_by = ['lines.item.code', 'lines.item.name']; $data = Dao::select( Order::class, ['number', 'lines.item.code' => $group_concat], ['date' => '2017%'], Dao::groupBy('number') );