PHPackages                             patrickfroch/datacollections - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. patrickfroch/datacollections

ActiveContao-bundle[Utility &amp; Helpers](/categories/utility)

patrickfroch/datacollections
============================

Es handelt sich um eine Erweiterung für das Open Source CMS Contao. Die Software stellt zwei Collections zur Verfügung und ist als Ersatz für den Einsatz für Arrays gedacht.

3.1.1(1mo ago)00LGPL-3.0-or-laterPHPPHP ^8.1

Since Sep 16Pushed 1mo agoCompare

[ Source](https://github.com/patrickfroch/datacollections)[ Packagist](https://packagist.org/packages/patrickfroch/datacollections)[ RSS](/packages/patrickfroch-datacollections/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (9)Versions (44)Used By (0)

Datacollections
===============

[](#datacollections)

[![PHP >= 8.1](https://camo.githubusercontent.com/541d376963feedd696892c1a022d2cfc22ebf3b6a56ff5eae9ada0d6404c3813/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d2532302533453d253230382e312e302d2532333838393242463f6c6f676f3d504850)](https://camo.githubusercontent.com/541d376963feedd696892c1a022d2cfc22ebf3b6a56ff5eae9ada0d6404c3813/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d2532302533453d253230382e312e302d2532333838393242463f6c6f676f3d504850)[![Contao >= 5.0](https://camo.githubusercontent.com/67526a8a91609bf99f8b379b8a634b76ec06d8badb4d4af7ccdd5e18ac0fc063/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d2533453d253230352e302e302d6f72616e67653f6c6f676f3d646174613a696d6167652f706e673b6261736536342c6956424f5277304b47676f414141414e5355684555674141414241414141414f434159414141416d4c35794b4141414268476c445131424a51304d6763484a765a6d6c735a5141414b4a46396b5431497730416378563954533657304f4a68427843464437575242564d52527131434543714657614e58426650514c6d6a516b4b53364f676d764277592f46716f4f4c7336344f726f49672b4148693575616b3643496c2f69387074496a78344c6766372b343937743442584b756d614662664f4b447074706c4e703452385956554976794b4345474c676b5a4155793567547851783878396339416d7939533749732f334e2f6a70686174425167494244504b6f5a704532385154322f6142754e39596c3670534372784f6647595352636b666d53363750456234374c4c484d766b7a5678326e70676e46736f394c506577556a453134696e69754b72706c4d2f6c5056595a627a48576167326c63302f32776d685258316c6d4f733052704c47494a596751494b4f424b6d71776b6152564a3856436c765a545076356831792b5353795a5846516f35466c434842736e31672f334237323674307553456c78524e41614558782f6b5942634b37514c76704f4e2f486a744d2b41594c50774a586539646462774d776e36633275466a384342726142692b75754a7538426c7a7641304a4d686d5a497242576c7970524c77666b626656414147623448496d7464625a782b6e4430434f7573726341416548514b4a4d3265732b372b3776376533664d35332b66674244626e4b554a7747495767414141415a6953306445415038412f77442f6f4c326e6b77414141416c7753466c7a41414175497741414c694d42654b552f646741414141643053553146422b554b4251305a41475472386b6b414141415a6445565964454e766257316c626e514151334a6c5958526c5a4342336158526f4945644a5456425867513458414141426c306c455156516f7a3432534f307363555269476e334e6d6e474664644a4d6f4772587855726d67424154646d496753624453535367674b676f57676c5a444b526f52552b51464a49536c43324370462f6f4159466f4c694e6e4642633046696b51323569524233635532387a4d34354b555a5a6a694e6b76753637764d2f336372346a6a7061757261474c2f6537306c725462752f6c66654f2f584f4873394176704d675a5752714f4a642b39367253474b4171713442724d3446304a35456e777a5a414537767144476b2f3559347a615452657a7459795747632f67654143486f6e663542745066676667316c627473346a716d734d774f6e71532f78333877436f72382f51785757514e763658446653504678657341494362434e6e55686279526c374e7a6c55535973784a5644674745573050556b4f723753726a596e49774f344469484f7678744668766249674e73414c582f44566c625677453052514134486141744a4944362b646c306b4b6848584c3976436d4970374d4530376b5357324b4e66784264336b5132334134432f75783561594e32614e5050754b647a684b65786b436e6e6a4a6769424f7668773769442f464831554e4233326a5346625a6f4b724e447a4575544e753946566848343433677a63413844356c635870484b71654d31784b626659343666494a4d314963636c7266666e6c3942786e49413370764836464c68306f635156347239765478655a675a6b505073504d724635752b6a422f795541414141415355564f524b35435949493d)](https://camo.githubusercontent.com/67526a8a91609bf99f8b379b8a634b76ec06d8badb4d4af7ccdd5e18ac0fc063/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d2533453d253230352e302e302d6f72616e67653f6c6f676f3d646174613a696d6167652f706e673b6261736536342c6956424f5277304b47676f414141414e5355684555674141414241414141414f434159414141416d4c35794b4141414268476c445131424a51304d6763484a765a6d6c735a5141414b4a46396b5431497730416378563954533657304f4a68427843464437575242564d52527131434543714657614e58426650514c6d6a516b4b53364f676d764277592f46716f4f4c7336344f726f49672b4148693575616b3643496c2f69387074496a78344c6766372b343937743442584b756d614662664f4b447074706c4e703452385956554976794b4345474c676b5a4155793567547851783878396339416d7939533749732f334e2f6a70686174425167494244504b6f5a704532385154322f6142754e39596c3670534372784f6647595352636b666d53363750456234374c4c484d766b7a5678326e70676e46736f394c506577556a453134696e69754b72706c4d2f6c5056595a627a48576167326c63302f32776d685258316c6d4f733052704c47494a596751494b4f424b6d71776b6152564a3856436c765a545076356831792b5353795a5846516f35466c434842736e31672f334237323674307553456c78524e41614558782f6b5942634b37514c76704f4e2f486a744d2b41594c50774a586539646462774d776e36633275466a384342726142692b75754a7538426c7a7641304a4d686d5a497242576c7970524c77666b626656414147623448496d7464625a782b6e4430434f7573726341416548514b4a4d3265732b372b3776376533664d35332b66674244626e4b554a7747495767414141415a6953306445415038412f77442f6f4c326e6b77414141416c7753466c7a41414175497741414c694d42654b552f646741414141643053553146422b554b4251305a41475472386b6b414141415a6445565964454e766257316c626e514151334a6c5958526c5a4342336158526f4945644a5456425867513458414141426c306c455156516f7a3432534f307363555269476e334e6d6e474664644a4d6f4772587855726d67424154646d496753624453535367674b676f57676c5a444b526f52552b51464a49536c43324370462f6f4159466f4c694e6e4642633046696b51323569524233635532387a4d34354b555a5a6a694e6b76753637764d2f336372346a6a7061757261474c2f6537306c725462752f6c66654f2f584f4873394176704d675a5752714f4a642b39367253474b4171713442724d3446304a35456e777a5a414537767144476b2f3559347a615452657a7459795747632f67654143486f6e663542745066676667316c627473346a716d734d774f6e71532f78333877436f72382f51785757514e763658446653504678657341494362434e6e55686279526c374e7a6c55535973784a5644674745573050556b4f723753726a596e49774f344469484f7678744668766249674e73414c582f44566c625677453052514134486141744a4944362b646c306b4b6848584c3976436d4970374d4530376b5357324b4e66784264336b5132334134432f75783561594e32614e5050754b647a684b65786b436e6e6a4a6769424f7668773769442f464831554e4233326a5346625a6f4b724e447a4575544e753946566848343433677a63413844356c635870484b71654d31784b626659343666494a4d314963636c7266666e6c3942786e49413370764836464c68306f635156347239765478655a675a6b505073504d724635752b6a422f795541414141415355564f524b35435949493d)[![PHPStan Level 9](https://camo.githubusercontent.com/f09b2c567f486d3ced51f191d996162e048bc863a83552fa6a60ae82393ce48c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d2532304c6576656c253230392d2532333235363365623f6c6f676f3d504850)](https://camo.githubusercontent.com/f09b2c567f486d3ced51f191d996162e048bc863a83552fa6a60ae82393ce48c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d2532304c6576656c253230392d2532333235363365623f6c6f676f3d504850)

Beschreibung
------------

[](#beschreibung)

Bei dieser Software handelt es sich um eine Erweiterung für das Open Source CMS Contao. Die Software stellt zwei Collections zur Verfügung und ist als Ersatz für den Einsatz für Arrays gedacht.

Autor
-----

[](#autor)

Patrick Froch

Lizenz
------

[](#lizenz)

Die Software wird unter LGPL-v3 veröffentlicht. Details sind in der Datei `LICENSE` zu finden.

Voraussetzungen
---------------

[](#voraussetzungen)

- php: ^8.1
- contao/core-bundle:^5.0
- patrickfroch/databaselayer: ^1.0
- patrickfroch/valueobjects: ^2.0

Installation
------------

[](#installation)

Die Installation geschieht über den ContaoManager. Einfach nach `esit/datacollections` suchen und installieren. Aleternativ kann die Erweiterung mit folgendem Befehl über [Composer](https://getcomposer.org/) installiert werden:

```
composer require esit/datacollections
```

Getestete Versionen
-------------------

[](#getestete-versionen)

Die Erweiterung wurde erfolgreich mit folgenden Kombinationen aus PHP und Contao getestet:

Contao[![PHP 8.2](https://camo.githubusercontent.com/dd14c71d22c26965797476c88c43ebb2ba06db225049c4496c17682cfe2e7dea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253230253230382e322d2532333838393242463f6c6f676f3d504850)](https://camo.githubusercontent.com/dd14c71d22c26965797476c88c43ebb2ba06db225049c4496c17682cfe2e7dea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253230253230382e322d2532333838393242463f6c6f676f3d504850)[![PHP 8.3](https://camo.githubusercontent.com/6c1cea9be23b7b925f494231eb3b97131b390346ff40272414eaa1091190aa43/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253230253230382e332d2532333838393242463f6c6f676f3d504850)](https://camo.githubusercontent.com/6c1cea9be23b7b925f494231eb3b97131b390346ff40272414eaa1091190aa43/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253230253230382e332d2532333838393242463f6c6f676f3d504850)[![PHP 8.4](https://camo.githubusercontent.com/a605faeed2375fec37eddb6b2558d47b91d14d114706b26e73f737eac8cba79a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253230253230382e342d2532333838393242463f6c6f676f3d504850)](https://camo.githubusercontent.com/a605faeed2375fec37eddb6b2558d47b91d14d114706b26e73f737eac8cba79a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253230253230382e342d2532333838393242463f6c6f676f3d504850)[![PHP 8.5](https://camo.githubusercontent.com/3c821f7ab8b644ec19910cf5a7a192ef18b413dd50e82d1c3155ac8bf13fc31f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253230253230382e352d2532333838393242463f6c6f676f3d504850)](https://camo.githubusercontent.com/3c821f7ab8b644ec19910cf5a7a192ef18b413dd50e82d1c3155ac8bf13fc31f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253230253230382e352d2532333838393242463f6c6f676f3d504850)[![Contao 5.0](https://camo.githubusercontent.com/40491aad26a4c27a1082a6e90be97787706a47ae705398c014d870a05d19c657/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e302d6f72616e67653f6c6f676f3d436f6e74616f)](https://camo.githubusercontent.com/40491aad26a4c27a1082a6e90be97787706a47ae705398c014d870a05d19c657/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e302d6f72616e67653f6c6f676f3d436f6e74616f)✓✓✓✓[![Contao 5.1](https://camo.githubusercontent.com/2042149bbd3a54477b8b4d113a5033e52a812f8baa0b84f57912a2473d961f8c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e312d6f72616e67653f6c6f676f3d436f6e74616f)](https://camo.githubusercontent.com/2042149bbd3a54477b8b4d113a5033e52a812f8baa0b84f57912a2473d961f8c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e312d6f72616e67653f6c6f676f3d436f6e74616f)✓✓✓✓[![Contao 5.2](https://camo.githubusercontent.com/902b30d49dd8e9f6df9a8b10b48eedc5c7a44dfde7dbee36d7fe805b3d69fc95/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e322d6f72616e67653f6c6f676f3d436f6e74616f)](https://camo.githubusercontent.com/902b30d49dd8e9f6df9a8b10b48eedc5c7a44dfde7dbee36d7fe805b3d69fc95/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e322d6f72616e67653f6c6f676f3d436f6e74616f)✓✓✓✓[![Contao 5.3](https://camo.githubusercontent.com/0fbc5f708d4d69330415588819b219383c062bc4fd270f8c1fc588e365456674/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e332d6f72616e67653f6c6f676f3d436f6e74616f)](https://camo.githubusercontent.com/0fbc5f708d4d69330415588819b219383c062bc4fd270f8c1fc588e365456674/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e332d6f72616e67653f6c6f676f3d436f6e74616f)✓✓✓✓[![Contao 5.4](https://camo.githubusercontent.com/642201ab6f14cb0c836324e506462c83a4c6249abec30a1278213ae8154fac20/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e342d6f72616e67653f6c6f676f3d436f6e74616f)](https://camo.githubusercontent.com/642201ab6f14cb0c836324e506462c83a4c6249abec30a1278213ae8154fac20/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e342d6f72616e67653f6c6f676f3d436f6e74616f)✓✓✓✓[![Contao 5.5](https://camo.githubusercontent.com/ac952d90da50ffc45b17d4d3661761f1a5686148ae25796ea1ad29ea81cfe6e3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e352d6f72616e67653f6c6f676f3d436f6e74616f)](https://camo.githubusercontent.com/ac952d90da50ffc45b17d4d3661761f1a5686148ae25796ea1ad29ea81cfe6e3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f436f6e74616f2533412d253230352e352d6f72616e67653f6c6f676f3d436f6e74616f)✓✓✓✓NameInterfaces
--------------

[](#nameinterfaces)

Die NameInterfaces sind für die Verwendung der `DatabaseRowCollction` erforderlich. Damit sichergestellt ist, dass es sich um valide Namen für Tabellen und Felder handelt, werden ValueObjects verwendet.

Es muss eine Aufzählung (`Enumeration`) mit den Tabellennamen und je eine pro Tabelle mit den Feldnamen erstellt werden.

### TablenamesInterface

[](#tablenamesinterface)

Die Aufzählung, die das `TablenamesInterface` implementiert, enthält die Namen aller relevanten Tabellen im Projekt.

```
use Esit\Valueobjects\Classes\Database\Enums\TablenamesInterface;

enum Tablenames implements TablenamesInterface
{
    case tl_content;
    case tl_test_data;
}
```

### FieldnamesInterface

[](#fieldnamesinterface)

Die Aufzählungen, die das `FieldnamesInterface` implementieren, enthalten die Namen aller Felder einer Tabelle. Es muss für jede Tabelle eine Aufzählung mit den entsprechenden Feldern geben.

```
use Esit\Valueobjects\Classes\Database\Enums\FieldnamesInterface;

enum TlContent implements FieldnamesInterface
{
    case id;
    case tstamp;
    case headline;
}

enum TlTestData implements FieldnamesInterface
{
    case id;
    case tstamp;
    case specialdata;
}
```

Collections
-----------

[](#collections)

### Grundfunktionen

[](#grundfunktionen)

Alle Collections erweitern die `Doctrine\Common\Collections\ArrayCollection`und bietet so auch alle Funktionen aus [`Doctrine\Common\Collections\ArrayCollection`](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html).

Im Einzelnen sind dies die folgenden Methoden:

- [add](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#add)
- [clear](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#clear)
- [contains](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#contains)
- [containsKey](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#containsKey)
- [current](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#current)
- [get](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#get) =&gt; Durch `getValue` ersetzt, um die gleichen Methodennamen in allen Collections verwenden zu können.
- [getKeys](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#getkeys)
- [getValues](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#getvalues)
- [isEmpty](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#isempty)
- [first](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#first)
- [exists](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#exists)
- [findFirst](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#findfirst)
- [filter](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#filter)
- [forAll](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#forall)
- [indexOf](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#indexof)
- [key](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#key)
- [last](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#last)
- [map](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#map)
- [reduce](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#reduce)
- [next](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#next)
- [partition](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#partition)
- [remove](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#remove)
- [removeElement](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#removeelement)
- [set](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#set) =&gt; Durch `getValue` ersetzt, um die gleichen Methodennamen in allen Collections verwenden zu können.
- [slice](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#slice)
- [toArray](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#toarray)
- [matching](https://www.doctrine-project.org/projects/doctrine-collections/en/stable/index.html#matching)

### ArrayCollection

[](#arraycollection)

Die `ArrayCollection` ist für den direkten Ersatz von Arrays gedacht. Die Collection kann beliebige Werte aufnehmen und bietet viele Methoden für den Umgang mit Arrays.

### DatabaseRowCollction

[](#databaserowcollction)

Die `DatabaseRowCollection` ist eine Spezialform der ArrayCollection. Sie bietet ebenfalls viele Methoden für den Umgang mit Arrays. Ihr Zweck ist es, eine Tabellenzeile aufzunehmen. Die Tabellenzeile kann mit `save()` gespeichert werden. Des Weiteren bietet sie ein LazyLoading von abhängigen Daten, wenn dies im DCA konfiguriert wurde.

Vewendung
---------

[](#vewendung)

Für die Erstellung der Collections gibt es eine Factory. Sie kann eine `ArrayCollection`, eine `DatabaseRowCollection` und eine `ArrayCollection` mit mehreren `DatabaseRowCollection`s erstellen.

### Vewendung der ArrayCollection

[](#vewendung-der-arraycollection)

Hier wird die Erstellung und einige Methoden der `ArrayCollection` gezeigt:

```
use Esit\Datacollections\Classes\Services\Factories\CollectionFactory;

class MyClass
{

    public function __construct(private readonly CollectionFactory $factory)
    {
    }

    public function useArray(): void
    {
        $myArrayCollection = $this->factory->createArrayCollection(
            ['t1' =>'test01', 't2' => 'test02']
        );

        // getValue
        echo $myArrayCollection->getValue('t1'); // => test01

        // setValue
        $myArrayCollection->setValue('t3', 'Test03');

        // fetchData
        $data = $myArrayCollection->fetchData(); // => ['t1' =>'test01', 't2' => 'test02', 't3' => 'Test03']

        // Iterator
        foreach ($myArrayCollection as $k => $v) {
            echo "$k: $y";
        }
    }
}
```

### Vewendung der DatabaseRowCollection

[](#vewendung-der-databaserowcollection)

Für die Verwendung der `DatabaseRowCollection` werden zunächst Enumerations vom Typ `TablenamesInterface` und `FieldnamesInterface` benötigt (s.o.). Mit diesen können dann über die Factory die `DatabaseRowCollection`s erstellt werden. Da intern ValueObjects für die Namen der Tabellen und Felder verwendet werden, können nur `DatabaseRowCollection`für existierende Tabellen erstellt werden und nur auf darin wirklich enthaltene Felder zugegriffen werden.

```
use Esit\Datacollections\Classes\Services\Factories\CollectionFactory;

class MyClass
{

    public function __construct(private readonly CollectionFactory $factory)
    {
    }

    public function useDatabaseRow(): void
    {
        // Eine leere Collection erstellen
        $myDbCollection = $this->factory->createDatabaseRowCollection(
            Tablenames::tl_test_data,
            [] // Hier können Daten als Array oder ArrayCollection übergeben werden.
        );

        // setValue
        $myDbCollection->getValue(TlTestData::specialdata, 'TestValue');

        // getValue
        echo $myDbCollection->getValue(TlTestData::specialdata); // => 'TestValue'

        // fetchData
        $data = $myDbCollection->fetchData(); // Alle Daten der Tabellenzeile als Array

        // ArrayCollection mit mehreren DatabaseRowCollections erstellen.
        $myCollections = $this->factory->createMultiDatabaseRowCollection(
            Tablenames::tl_test_data,
            [] // Hier können Daten als multidemensionales Array übergeben werden.
        );

        // Iterator ($myCollections ist eine ArrayCollection, $oneDbCollection je eine DatabaseRowCollection)
        foreach ($myCollections as $oneDbCollection) {
            var_dump($oneDbCollection); // oder alle anderen Aktionen einer DatabaseRowCollection
        }
    }
}
```

Für den Zugriff auf einen Wert wird immer ein `FieldnamesInterface` benötigt.

Auf den `DatabaseRowCollection` stehen die gleichen Methoden zur Verfügung, wie auf den `ArrayCollection`. Zusätzlich gibt es die Methode `save` um den Datensatz zu speichern.

Arrays werden immmer als serialisierter String abgelegt und als `ArrayCollection` zurückgegeben.

Wenn im DCA das LazyLoading konfiguriert ist, werden die abhängigen Daten automatisch beim Zugriff auf das Feld geladen und zurückgegeben.

### LazyLoading

[](#lazyloading)

Damit die abhängigen Daten geladen werden können, muss das LazyLoading im DCA konfiguriert werden.

```
$table = 'tl_test_data';

$GLOBALS['TL_DCA'][$table]['fields']['author'] = [
    'label'                 => &$GLOBALS['TL_LANG'][$table]['author'],
    'exclude'               => true,
    'inputType'             => 'text',
    'foreignKey'            => 'tl_member.CONCAT(firstname,' ',lastname)',
    'lazyloading'           => ['table'=>'tl_member', 'field'=>'id', 'serialised'=>false],
    'eval'                  => ['mandatory'=>true, 'maxlength'=>255],
    'sql'                   => "varchar(255) NOT NULL default ''"
];
```

`table` gibt die Tabelle an, aus der die Daten geladen werden sollen. `field` gibt an, in welchem Feld der Fremdtabelle der Wert gesucht wird und `serialised` gibt an, ob es sich um einen Werte (`false`) oder ein serialisiertes Array von Werten handelt (`true`).

### CommonData

[](#commondata)

Die `DatabaseRowCollection` kann zusätzliche Daten verwalten, die nicht in der Datenbank gespeichert werden können. Die ist nützlich, wenn man den Daten für die Ausgabe zusätzliche Werte mitgeben will.

Es gibt zu diesem Zweck eine extra Collection, in der die zusätzlichen Daten abgelegt werden. Mit den folgenden Methoden kann darauf zugegriffen werden.

```
use Esit\Datacollections\Classes\Services\Factories\CollectionFactory;

class MyClass
{

    public function __construct(private readonly CollectionFactory $factory)
    {
    }

    public function useDatabaseRow(): void
    {
        // Eine leere Collection erstellen
        $myDbCollection = $this->factory->createDatabaseRowCollection(
            Tablenames::tl_test_data,
            [] // Hier können Daten als Array oder ArrayCollection übergeben werden.
        );

        // Zusätzlichen Wert berechnen und hinterlegen
        $myDbCollection->setCommonValue('incremented_id', $myDbCollection->getValue('id') + 1);

        // Zusätzlichen Wert abfragen
        echo $myDbCollection->getCommonValue('incremented_id'); // => id + 1

        // Alle zusätzlichen Werte als Array beziehen
        $commonData = $myDbCollection->getCommonDataAsArray(); // ['incremented_id' => id + 1]
    }
}
```

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance91

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 93.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~16 days

Recently: every ~100 days

Total

38

Last Release

42d ago

Major Versions

1.0.8 → 2.0.02024-10-09

1.0.9 → 2.0.32024-11-07

2.1.6 → 3.0.02026-04-21

PHP version history (2 changes)1.0.0PHP ^8.2

3.0.0PHP ^8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/d9cfea42eb59a299a95d734fe5b27b90f572ccbcf947425ba5b0de743df7d679?d=identicon)[patrickfroch](/maintainers/patrickfroch)

---

Top Contributors

[![eS-IT](https://avatars.githubusercontent.com/u/1199106?v=4)](https://github.com/eS-IT "eS-IT (15 commits)")[![zonky2](https://avatars.githubusercontent.com/u/1045318?v=4)](https://github.com/zonky2 "zonky2 (1 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/patrickfroch-datacollections/health.svg)

```
[![Health](https://phpackages.com/badges/patrickfroch-datacollections/health.svg)](https://phpackages.com/packages/patrickfroch-datacollections)
```

###  Alternatives

[codefog/contao-haste

haste extension for Contao Open Source CMS

46668.4k162](/packages/codefog-contao-haste)[codefog/contao-news_categories

News Categories bundle for Contao Open Source CMS

3187.0k6](/packages/codefog-contao-news-categories)[terminal42/contao-node

Node bundle for Contao Open Source CMS

3175.6k5](/packages/terminal42-contao-node)[terminal42/contao-folderpage

Provides a new page type for Contao that allows you to group pages into folders.

18153.4k10](/packages/terminal42-contao-folderpage)[terminal42/contao-url-rewrite

URL Rewrite bundle for Contao Open Source CMS

15100.0k3](/packages/terminal42-contao-url-rewrite)[terminal42/contao-mp_forms

An extension for Contao Open Source CMS to create multi steps forms using the form generator

2534.7k6](/packages/terminal42-contao-mp-forms)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
