PHP code example of nieknijland / rdw-opendata-php
1. Go to this page and download the library: Download nieknijland/rdw-opendata-php library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
nieknijland / rdw-opendata-php example snippets
use NiekNijland\RDW\Rdw;
use NiekNijland\RDW\Fields\RegisteredVehicleField;
use NiekNijland\RDW\Query\SortDirection;
$rdw = new Rdw();
$vehicles = $rdw->registeredVehicles()
->where(RegisteredVehicleField::CommercialName, 'POLO')
->where(RegisteredVehicleField::CanBeTransferred, true)
->orderBy(RegisteredVehicleField::RegistrationDate, SortDirection::Desc)
->limit(10)
->get();
foreach ($vehicles as $vehicle) {
echo $vehicle->licensePlate.' '.$vehicle->brand.' '.$vehicle->commercialName.PHP_EOL;
echo ' registered: '.$vehicle->registrationDate?->toDateString().PHP_EOL;
echo ' apk: '.$vehicle->apkExpiryDate?->toDateString().PHP_EOL;
}
use NiekNijland\RDW\Rdw;
use NiekNijland\RDW\Http\Configuration;
$rdw = new Rdw(new Configuration(
appToken: 'YOUR_SOCRATA_APP_TOKEN', // optional, raises your rate limit
userAgent: 'your-app/1.0',
timeoutSeconds: 10.0,
));
$builder = $rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->whereIn(RegisteredVehicleField::VehicleType, ['Personenauto', 'Bedrijfsauto'])
->whereBetween(RegisteredVehicleField::FirstAdmissionDate, $from, $to)
->select(
RegisteredVehicleField::LicensePlate,
RegisteredVehicleField::Brand,
RegisteredVehicleField::CommercialName,
)
->orderBy(RegisteredVehicleField::RegistrationDate, SortDirection::Desc)
->limit(25);
$vehicles = $builder->get(); // list<RegisteredVehicle>
$first = $builder->first(); // ?RegisteredVehicle
$any = $builder->exists(); // bool — single-row probe, no hydration
$plates = $builder->pluck(RegisteredVehicleField::LicensePlate); // list<string>
$top = $rdw->registeredVehicles()
->select(RegisteredVehicleField::Brand)
->count(null, 'n')
->min(RegisteredVehicleField::SeatCount, 'min_seats')
->max(RegisteredVehicleField::SeatCount, 'max_seats')
->groupBy(RegisteredVehicleField::Brand)
->havingRaw('count(*) > 100000')
->orderByRaw('n DESC')
->limit(5)
->getProjection();
$rdw->registeredVehicles()
->where(RegisteredVehicleField::CanBeTransferred, true) // → tenaamstellen_mogelijk='Ja'
->where(RegisteredVehicleField::HasOpenRecall, false) // → openstaande_terugroepactie_indicator='Nee'
->get();
use Carbon\CarbonImmutable;
$rdw->registeredVehicles()
->where(RegisteredVehicleField::FirstAdmissionDate, CarbonImmutable::parse('1991-01-01'), '>=')
->where(RegisteredVehicleField::FirstAdmissionDate, CarbonImmutable::parse('1992-01-01'), '<')
->get();
$rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->whereRaw("date_extract_y(datum_eerste_toelating_dt) = 2020")
->getProjection();
// Raw row fetch. The $query map is passed through to Socrata as-is.
$rows = $rdw->rawRows(DatasetId::RegisteredVehicles, [
'$where' => "kenteken = 'AB-12-CD'",
'$select' => 'kenteken, merk, handelsbenaming',
]);
// Raw metadata document (column types, descriptions, last update, …).
$meta = $rdw->rawMetadata(DatasetId::RegisteredVehicles);
foreach ($rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->iterate(pageSize: 1000) as $vehicle) {
// process one vehicle at a time without buffering the whole set
}
$vehicle = $rdw->registeredVehicles()
->where(RegisteredVehicleField::LicensePlate, '6ZNS30')
->first();
$fuels = $rdw->relations()->fuelsFor($vehicle)->get();
$axles = $rdw->relations()->axlesFor($vehicle)->get();
$bodyworks = $rdw->relations()->bodyworksFor($vehicle)->get();
$subcategories = $rdw->relations()->subcategoriesFor($vehicle)->get();
$specials = $rdw->relations()->specialFeaturesFor($vehicle)->get();
$trackSets = $rdw->relations()->trackSetsFor($vehicle)->get();
$judgement = $rdw->relations()->odometerJudgementFor($vehicle)->first();
// Composite key: bodywork → bodywork specifications / vehicle classes
$bodywork = $bodyworks[0];
$specifications = $rdw->relations()->specificationsFor($bodywork)->get();
$vehicleClasses = $rdw->relations()->vehicleClassesFor($bodywork)->get();
$count = $rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->where(RegisteredVehicleField::CommercialName, 'UP')
->where(RegisteredVehicleField::PrimaryColor, 'WIT')
->where(RegisteredVehicleField::IsWamInsured, true)
->count()
->getProjection();
// → [['count' => '21084']]
$top = $rdw->registeredVehicles()
->select(RegisteredVehicleField::Brand)
->count(null, 'n')
->min(RegisteredVehicleField::SeatCount, 'min_seats')
->max(RegisteredVehicleField::SeatCount, 'max_seats')
->groupBy(RegisteredVehicleField::Brand)
->havingRaw('count(*) > 100000')
->orderByRaw('n DESC')
->limit(5)
->getProjection();
// → [
// ['merk' => 'VOLKSWAGEN', 'n' => '1521987', 'min_seats' => '1', 'max_seats' => '23'],
// ['merk' => 'PEUGEOT', 'n' => '852665', 'min_seats' => '1', 'max_seats' => '17'],
// ...
// ]
$count = $rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->whereAny(fn ($q) => $q
->whereStartsWith(RegisteredVehicleField::CommercialName, 'GTI')
->whereContains(RegisteredVehicleField::CommercialName, 'R32'))
->where(RegisteredVehicleField::IsWamInsured, true)
->count()
->getProjection();
use Carbon\CarbonImmutable;
$count = $rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->whereBetween(
RegisteredVehicleField::FirstAdmissionDate,
CarbonImmutable::parse('2020-01-01', 'UTC'),
CarbonImmutable::parse('2024-12-31', 'UTC'),
)
->count()
->getProjection();
// → [['count' => '348046']]
$plates = $rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->where(RegisteredVehicleField::CommercialName, 'UP')
->where(RegisteredVehicleField::PrimaryColor, 'WIT')
->orderBy(RegisteredVehicleField::LicensePlate)
->limit(5)
->pluck(RegisteredVehicleField::LicensePlate);
// → ['00TKZ5', '00TKZ6', '00TPB4', '00TPL4', '00TTL4']
$found = $rdw->registeredVehicles()
->where(RegisteredVehicleField::LicensePlate, 'ZZ-ZZ-ZZ')
->exists();
// → false
$hit = $rdw->registeredVehicles()
->search('polo gti')
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->select(
RegisteredVehicleField::LicensePlate,
RegisteredVehicleField::CommercialName,
)
->first();
foreach ($rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->iterate(pageSize: 1000) as $vehicle) {
// one row at a time, no buffering
}
$params = $rdw->registeredVehicles()
->where(RegisteredVehicleField::Brand, 'VOLKSWAGEN')
->whereBetween(
RegisteredVehicleField::FirstAdmissionDate,
CarbonImmutable::parse('2020-01-01', 'UTC'),
CarbonImmutable::parse('2024-12-31', 'UTC'),
)
->toSoqlParams();
// → [
// '$where' => "(merk = 'VOLKSWAGEN') AND "
// . "(datum_eerste_toelating_dt BETWEEN '2020-01-01T00:00:00.000' "
// . "AND '2024-12-31T00:00:00.000')",
// ]
use NiekNijland\RDW\Datasets\DatasetId;
use NiekNijland\RDW\Schema\SchemaRegistry;
$schema = (new SchemaRegistry())->get(DatasetId::RegisteredVehicles);
foreach ($schema->exposedFields() as $field) {
// $field->enumCase — 'CommercialName'
// $field->rdwKey — 'handelsbenaming'
// $field->propertyName — 'commercialName'
// $field->cast — CastType case
// $field->vocabulary — ?ValueVocabulary
}
foreach ($schema->fieldsWithVocabulary() as $field) {
$vocab = $field->vocabulary;
// $vocab->values — list<string>
// $vocab->exhaustive — true ⇒ full known set, false ⇒ representative examples
}
use NiekNijland\RDW\Datasets\DatasetId;
use NiekNijland\RDW\Testing\FakeRdw;
$rdw = (new FakeRdw())
->withRegisteredVehicles([
['kenteken' => 'AB123C', 'merk' => 'HONDA', 'handelsbenaming' => 'CBR600RR', 'cilinderinhoud' => '599'],
])
->withRegisteredVehicleFuels([
['kenteken' => 'AB123C', 'nettomaximumvermogen' => '88'],
]);
$record = $rdw->registeredVehicles()->where(RegisteredVehicleField::Brand, 'HONDA')->first();
// $record->licensePlate === 'AB123C', $record->engineDisplacement === 599
// Simulate a transient failure, then recover:
$rdw->failWith(DatasetId::RegisteredVehicles); // throws RdwException on next query
$rdw->clearFailure(DatasetId::RegisteredVehicles);
// Assert on what was requested:
$rdw->recordedRequests(); // [['dataset' => 'm9d7-ebf2', 'query' => [...]], ...]
bash
composer