byjg / anydataset
Anydataset is an agnostic data source abstraction layer in PHP. Core Module.
Fund package maintenance!
byjg
Installs: 109 588
Dependents: 7
Suggesters: 0
Security: 0
Stars: 12
Watchers: 3
Forks: 3
Open Issues: 0
Requires
- php: >=8.1 <8.4
- ext-dom: *
- byjg/serializer: ^5.0
- byjg/xmlutil: ^5.0
Requires (Dev)
- phpunit/phpunit: ^9.6
- vimeo/psalm: ^4.24
README
Anydataset Core Module. Anydataset is an agnostic data source abstraction layer in PHP.
Features
- Access different data sources using the same interface.
- Iterable results
- Convert results to array
Current Implementations
Examples
Iterating with foreach
<?php $dataset = new \ByJG\AnyDataset\Core\AnyDataset("example"); $iterator = $dataset->getIterator(); foreach ($iterator as $row) { print $row->toArray(); }
Filtering results
<?php $filter = new \ByJG\AnyDataset\Core\IteratorFilter(); $filter->addRelation("field1", \ByJG\AnyDataset\Core\Enum\Relation::EQUAL, 10); $iterator2 = $dataset->getIterator($filter);
Converting to Array
<?php $iterator = $dataset->getIterator(); print_r($iterator->toArray());
Iterating with While
<?php $iterator = $dataset->getIterator(); while ($iterator->hasNext()) { $row = $iterator->moveNext(); print_r($row->get("field1")); }
or
foreach ($iterator as $row) { print_r($row->get("field1")); }
Additional Classes
RowOutpout - Format Field Output
This class defines custom format for the field output.
<?php $output = RowOutput::getInstance() ->addFormat("field1", "Test {field1}") ->addFormat("field2", "Showing {} and {field3}"); ->addCustomFormat("field3", function ($row, $field, $value) { // return the formatted output. // $row: The row object with all values // $field: The field has been processed // $value: The field value }); // This will output the field1 formatted: echo $output->print($row, "field1"); // This will apply the format defintion to all fields at once: $ouput->apply($row);
Notes about the format pattern:
{}
represents the current value{.}
represents the field name{field_name}
return the value of $row->get(field_name)
RowValidator - Validate Field contents
<?php $validator = RowValidator::getInstance() ->requiredFields(["field1", "field2"]) ->numericFields(['field1', 'field3']) ->regexValidation("field4", '/\d{4}-\d{2}-\d{2}/') ->customValidation("field3", function($value) { // Return any string containing the error message if validation FAILS // otherwise, just return null and the valition will pass. }); $validator->validate($row) // Will return an array with the error messages. Empty array if not errors.
Formatters
AnyDataset comes with an extensible set to format the AnyDataset. The interface is:
namespace ByJG\AnyDataset\Core\Formatter; interface FormatterInterface { /** * Return the object in your original format, normally as object * * @return mixed */ public function raw(); /** * Return the object transformed to string. * * @return string */ public function toText(); /** * Save the contents to a file * * @param string $filename * @return void */ public function saveToFile($filename); }
AnyDataset implements two formatters:
- JsonFormatter
- XmlFormatter
Example:
<?php $formatter = new XmlFormatter($anydataset->getIterator()); $formatter->raw(); // Return a DOM object $formatter->toText(); // Return the XML as a text $formatter->saveToFile("/path/to/file.xml"); // Save the XML Text to a file.
Install
composer require "byjg/anydataset"
Running Unit tests
vendor/bin/phpunit