DB

object

%DB

/phlo/resources/DB/DB.phlo
version 1.0
creator q-ai.nl
summary Database engine class
type abstract class
package database
frontend false
backend true
requires php-ext:pdo
tags database pdo sql
prop

%DB -> PDO

line 11
Deze functie genereert een fout als er geen PDO-connector is gedefinieerd voor databasebewerkingen.
error('No PDO connector defined')
prop

%DB -> fieldQuotes

line 12
Haal de veldcitaten op voor een specifiek databaseveld, zodat de SQL-query's correct worden opgemaakt.
bt
method

%DB -> load (string $table, string $columns = '*', string $where = void, string $joins = void, string $group = void, string $limit = void, string $order = void, ...$args)

line 14
Laadt gegevens uit de opgegeven database tabel, met de mogelijkheid om optioneel kolommen, filtervoorwaarden, joins, groepering, sortering en beperking van de resultaten te selecteren.
$table = strpos($table, space) || strpos($table, dot) ? $table : "$this->fieldQuotes$table$this->fieldQuotes"
!$where && $args && $where = loop(array_keys($args), fn($column) => "$table.$column=?", ' AND ')
$joins && $joins = " $joins"
$where && $where = " WHERE $where"
$group && $group = " GROUP BY $group"
$order && $order = " ORDER BY $order"
$limit && $limit = " LIMIT $limit"
$query = "SELECT $columns FROM $table$joins$where$group$order$limit"
return $this->query($query, ...array_values($args))
method

%DB -> query ($query, ...$args)

line 26
Voert een databasequery uit met PDO, hetzij direct of met voorbereide instructies op basis van de aanwezigheid van argumenten. Het biedt ook foutopsporingsinformatie als dit is ingeschakeld, inclusief het type query en het aantal aangetaste rijen.
try {
	if (!$args) $stmt = $this->PDO->query($query)
	else {
		$stmt = $this->PDO->prepare($query)
		$stmt->execute($args)
	}
	if (debug){
		$match = regex('/\b(UPDATE|INSERT INTO|DELETE FROM|FROM)\b\s+([`"\[]?\w+[`"\]]?)/i', strtr($query, [$this->fieldQuotes => void]))
		$where = strtr(regex('/\bWHERE (\b.+)/is', $query)[1] ?? void, [' ORDER BY' => void])
		$match && debug("Q: $match[1] $match[2]".strtr(rtrim(" $where "), [dq => void])." (".$stmt->rowCount().")")
	}
}
catch (\PDOException $e){
	error('Database error'.colon.lf.$query.lf.lf.$e->getMessage())
}
return $stmt
method

%DB -> column (...$args)

line 45
Haalt een enkele kolom op uit de resultaten van een databasequery, met behulp van de opgegeven argumenten om de gegevens te laden.
$this->load(...$args)->fetchAll(\PDO::FETCH_COLUMN)
method

%DB -> item (...$args)

line 46
Haal een enkele kolom uit de database met de opgegeven argumenten en retourneer null als er geen waarde wordt gevonden.
$this->load(...$args)->fetch(\PDO::FETCH_COLUMN) ?: null
method

%DB -> pair (...$args)

line 47
Haalt alle rijen uit de database op als een sleutel-waarde paar array met de opgegeven argumenten.
$this->load(...$args)->fetchAll(\PDO::FETCH_KEY_PAIR)
method

%DB -> group (...$args)

line 48
Haal alle records uit de database op, gegroepeerd op een opgegeven kolom of kolommen, en retourneer de resultaten als een array van objecten van de opgegeven klasse.
$this->load(...$args)->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_CLASS, obj::class)
method

%DB -> records (...$args)

line 49
Haalt alle records uit de database op als objecten van de opgegeven klasse, met behulp van de meegeleverde argumenten voor de query.
$this->load(...$args)->fetchAll(\PDO::FETCH_CLASS|\PDO::FETCH_UNIQUE, obj::class)
method

%DB -> rows (...$args)

line 50
Haalt alle rijen uit de database op als instanties van de opgegeven klasse met behulp van de meegeleverde argumenten.
$this->load(...$args)->fetchAll(\PDO::FETCH_CLASS, obj::class)
method

%DB -> record (...$args)

line 51
Haal een enkel record uit de database op als een object van de opgegeven klasse, en retourneer null als er geen record wordt gevonden.
$this->load(...$args)->fetchObject(obj::class) ?: null
method

%DB -> create (string $table, ...$data)

line 53
Voegt een nieuw record toe aan de opgegeven database tabel met de verstrekte gegevens, waarbij duplicaten optioneel worden genegeerd.
if ($ignore = $data['ignore'] ?? false) unset($data['ignore'])
$columns = $this->fieldQuotes.implode($this->fieldQuotes.comma.$this->fieldQuotes, array_keys($data)).$this->fieldQuotes
$values = implode(comma, array_fill(0, count($data), qm))
$query = "INSERT".($ignore ? ' IGNORE' : void)." INTO $table ($columns) VALUES ($values)"
$this->query($query, ...array_values(loop($data, fn($value) => is_a($value, obj::class) ? $value->id : $value)))
return $this->PDO->lastInsertId() ?: ($data['id'] ?? null)
method

%DB -> change (string $table, string $where, ...$data)

line 62
Werk records bij in de opgegeven database tabel op basis van de gegeven voorwaarden en gegevens.
$whereCount = substr_count($where, qm)
$updates = isset($data['updates']) ? $data['updates'] : void
unset($data['updates'])
$updates .= (($wheres = array_slice(array_keys($data), $whereCount)) && $updates ? comma : void).loop($wheres, fn($key) => $key.'=?', comma)
$query = "UPDATE $table SET $updates WHERE $where"
$args = array_values([...array_slice($data, $whereCount), ...array_slice($data, 0, $whereCount)])
return $this->query($query, ...$args)->rowCount()
method

%DB -> delete (string $table, string $where, ...$args)

line 72
Verwijdert rijen uit de opgegeven tabel op basis van de gegeven voorwaarde. Het retourneert het aantal aangetaste rijen.
$this->query("DELETE FROM $table WHERE $where", ...$args)->rowCount()
method

%DB -> begin

line 73
Start een nieuwe database transactie met PDO.
$this->PDO->beginTransaction()
method

%DB -> commit

line 74
Bevestigt de huidige transactie in de database, waardoor alle wijzigingen die tijdens de transactie zijn aangebracht permanent worden.
$this->PDO->commit()
method

%DB -> rollback

line 75
Rol de huidige transactie terug als deze actief is, waardoor alle wijzigingen die tijdens de transactie zijn aangebracht, ongedaan worden gemaakt.
$this->PDO->inTransaction() && $this->PDO->rollBack()
method

%DB -> transaction ($callback)

line 77
Voert een database-transactie uit door de transactie te starten, de opgegeven callback uit te voeren en de transactie te bevestigen als deze succesvol is; anders wordt de transactie teruggedraaid in geval van een fout.
$this->begin
try {
	$result = $callback()
	$this->commit
	return $result
} catch (\Throwable $e){
	$this->rollback
	throw $e
}
object

%JSONDB

/phlo/resources/DB/JSONDB.phlo
version 1.2
creator q-ai.nl
summary JSON file database driver. One JSONDB instance = one JSON file = one model table. No joins, no transactions, no schema introspection.
extends DB
package database
frontend false
backend true
requires @DB @JSON_result
tags json database file storage
static

JSONDB :: __handle

line 11
JSONDB::$__handle is een verwijzing naar de interne bestandsverwijzing die wordt gebruikt voor het openen van de JSON-database die is opgegeven door het $file-pad.
"JSONDB/$file"
method

%JSONDB -> __construct (private string $file)

line 12
De constructor initialiseert een JSONDB-instantie en zorgt ervoor dat de map voor het opgegeven bestand bestaat, en maakt deze indien nodig aan.
$dir = dirname($this->file)
is_dir($dir) || mkdir($dir, 0755, true) || error("JSONDB: cannot create dir $dir")
prop

%JSONDB -> PDO

line 16
Deze functie genereert een foutmelding die aangeeft dat de JSONDB-driver niet compatibel is met PDO.
error('JSONDB driver does not use PDO')
prop

%JSONDB -> fieldQuotes

line 17
Haalt de citaten op voor een opgegeven veld in een JSONDB-resource.
''
prop

%JSONDB -> lastInsertedId

line 18
Geeft de ID van het laatst ingevoegde record in de JSONDB.
null
method

%JSONDB -> objRead

line 20
Leest een JSON-bestand en retourneert de inhoud als een associatieve array. Als het bestand niet bestaat of leeg is, retourneert het een lege array.
file_exists($this->file) ? json_decode(file_get_contents($this->file), true) ?: [] : []
method

%JSONDB -> objWrite (array $data)

line 21
Schrijft de opgegeven arraygegevens naar een JSON-bestand, waarbij het in een mooi opgemaakt formaat wordt gecodeerd en ervoor wordt gezorgd dat Unicode-tekens niet worden ontsnapt.
file_put_contents($this->file, json_encode(array_values($data), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX)
method

%JSONDB -> objNextId (array $data)

line 22
Geeft de volgende beschikbare ID voor een nieuw object in de gegeven array van gegevens door de maximale huidige ID te vinden en er één bij op te tellen, of retourneert 1 als de array leeg is.
$data ? (int)max(array_column($data, 'id')) + 1 : 1
method

%JSONDB -> objFilter (array $data, string $where = void, ...$args)

line 24
Filtert een array van gegevens op basis van opgegeven voorwaarden in de 'where'-clausule en retourneert alleen de overeenkomende rijen.
if (!$where) return $data
$filtered = []
foreach ($data AS $row){
	$match = true
	$parts = preg_split('/\s+AND\s+/i', $where)
	$argIndex = 0
	foreach ($parts AS $part){
		if (preg_match('/^[`"]?(\w+)[`"]?\s*=\s*\?$/', trim($part), $m)){
			$column = $m[1]
			$value = $args[$argIndex++] ?? null
			if (($row[$column] ?? null) != $value) $match = false
		}
		elseif (preg_match('/^[`"]?(\w+)[`"]?\s+IN\s*\((.+)\)$/i', trim($part), $m)){
			$column = $m[1]
			$ids = array_map(fn($v) => trim($v, "\"' "), explode(',', $m[2]))
			if (!in_array($row[$column] ?? null, $ids)) $match = false
		}
	}
	$match && $filtered[] = $row
}
return $filtered
method

%JSONDB -> objSelect (string $where = void, string $limit = void, string $order = void, ...$args)

line 48
Filtert en haalt objecten op uit een JSON-database op basis van opgegeven voorwaarden, met optionele sortering en beperking van de resultaten.
$data = $this->objFilter($this->objRead(), $where, ...array_values($args))
if ($order){
	$desc = str_contains($order, 'DESC')
	$col = trim(preg_replace('/\s+(ASC|DESC)/i', '', $order), '` ')
	usort($data, fn($a, $b) => $desc ? ($b[$col] ?? 0) <=> ($a[$col] ?? 0) : ($a[$col] ?? 0) <=> ($b[$col] ?? 0))
}
$limit && $data = array_slice($data, 0, (int)$limit)
return $data
method

%JSONDB -> create (string $table, ...$data)

line 59
Voegt een nieuwe invoer toe in de opgegeven tabel van de JSON-database, waarbij een ID wordt toegewezen als deze niet is opgegeven, en optioneel duplicaten op basis van de ID negeert.
if ($ignore = $data['ignore'] ?? false) unset($data['ignore'])
$all = $this->objRead()
$data['id'] ??= $this->objNextId($all)
foreach ($data AS $key => $value) is_a($value, 'obj') && $data[$key] = $value->id
if ($ignore){
	foreach ($all AS $row) if (($row['id'] ?? null) == $data['id']) return $data['id']
}
$all[] = $data
$this->objWrite($all)
$this->lastInsertedId = $data['id']
return $data['id']
method

%JSONDB -> change (string $table, string $where, ...$data)

line 73
Werk de rijen in de opgegeven tabel bij die voldoen aan de gegeven voorwaarde met nieuwe gegevens en retourneer het aantal gewijzigde rijen.
$all = $this->objRead()
$whereCount = substr_count($where, '?')
$whereArgs = array_slice(array_values($data), 0, $whereCount)
$updates = array_slice($data, $whereCount, null, true)
$changed = 0
foreach ($all AS &$row){
	if ($this->objFilter([$row], $where, ...$whereArgs)){
		foreach ($updates AS $key => $value) $row[$key] = $value
		$changed++
	}
}
unset($row)
$this->objWrite($all)
return $changed
method

%JSONDB -> delete (string $table, string $where, ...$args)

line 90
Verwijdert records uit de opgegeven tabel in de JSON-database die voldoen aan de gegeven voorwaarde.
$all = $this->objRead()
$matching = $this->objFilter($all, $where, ...$args)
$matchIds = array_column($matching, 'id')
$remaining = array_values(array_filter($all, fn($row) => !in_array($row['id'] ?? null, $matchIds)))
$this->objWrite($remaining)
return count($matching)
method

%JSONDB -> load (string $table, string $columns = '*', string $where = void, string $joins = void, string $group = void, string $limit = void, string $order = void, ...$args)

line 99
Laadt gegevens uit een opgegeven tabel in JSONDB, met de mogelijkheid om optioneel kolommen te selecteren, te filteren met voorwaarden, te koppelen aan andere tabellen, te groeperen, resultaten te beperken en te ordenen.
!$where && $args && $where = loop(array_keys($args), fn($column) => "$column=?", ' AND ')
$data = $this->objSelect($where, $limit, $order, ...array_values($args))
return %JSON_result($data)
method

%JSONDB -> query ($query, ...$args)

line 104
Voert een query uit tegen de JSONDB, maar ondersteunt geen ruwe SQL-queries.
error('JSONDB driver does not support raw SQL queries')
method

%JSONDB -> begin

line 106
Begint een transactie in de JSONDB, waardoor meerdere bewerkingen atomair kunnen worden uitgevoerd.
null
method

%JSONDB -> commit

line 107
Bevestigt de huidige transactie in de JSONDB en slaat alle wijzigingen op die tijdens de transactie zijn aangebracht.
null
method

%JSONDB -> rollback

line 108
Herstelt de laatste transactie in de JSONDB en brengt de database terug naar de vorige staat.
null
object

%JSON_result

/phlo/resources/DB/JSON.result.phlo
version 1.0
creator q-ai.nl
summary Minimal PDOStatement-like wrapper for JSONDB result arrays
package database
frontend false
backend true
tags json database result
static

JSON_result :: __handle

line 9
Deze eigenschap wordt gebruikt om toegang te krijgen tot de interne handle van een JSON_result-object.
null
prop

%JSON_result -> data

line 10
Toegang tot de `$data`-eigenschap van het `JSON_result`-object, dat de geparsed gegevens van een JSON-respons bevat.
[]
method

%JSON_result -> __construct (array $data)

line 11
Initialiseert een JSON_result-object met de opgegeven gegevensarray.
$this->data = $data
method

%JSON_result -> fetchAll ($mode = 2)

line 13
Haal alle resultaten op uit de JSON-resource volgens de opgegeven modus, met verschillende indelingen zoals een enkele kolom, sleutel-waarde paren of objecten.
if ($mode === \PDO::FETCH_COLUMN) return loop($this->data, fn($row) => reset((array)$row))
if ($mode === \PDO::FETCH_KEY_PAIR){
	$out = []
	foreach ($this->data AS $row){
		$vals = array_values((array)$row)
		$out[$vals[0] ?? null] = $vals[1] ?? null
	}
	return $out
}
if (($mode & (\PDO::FETCH_CLASS | \PDO::FETCH_UNIQUE)) === (\PDO::FETCH_CLASS | \PDO::FETCH_UNIQUE)){
	$out = []
	foreach ($this->data AS $row){
		$o = new obj
		foreach ((array)$row AS $k => $v) $o->$k = $v
		$out[$row['id'] ?? count($out)] = $o
	}
	return $out
}
if (($mode & \PDO::FETCH_CLASS) === \PDO::FETCH_CLASS){
	$out = []
	foreach ($this->data AS $row){
		$o = new obj
		foreach ((array)$row AS $k => $v) $o->$k = $v
		$out[] = $o
	}
	return $out
}
return $this->data
method

%JSON_result -> fetchObject ($class = 'obj')

line 44
Haal een enkel object van de opgegeven klasse op uit de JSON-resultaatgegevens, waarbij de eigenschappen van het object worden gekoppeld aan de waarden in de eerste rij van de gegevens.
if (!$this->data) return null
$row = reset($this->data)
$o = new $class
foreach ((array)$row AS $k => $v) $o->$k = $v
return $o
method

%JSON_result -> fetch ($mode = 2)

line 52
Haal een resultaatrij op uit de JSON-gegevens, waarbij ofwel de hele rij of een specifieke kolom wordt geretourneerd op basis van de opgegeven modus.
if (!$this->data) return null
$row = reset($this->data)
if ($mode === \PDO::FETCH_COLUMN) return reset((array)$row)
return $row
method

%JSON_result -> fetchColumn ($col = 0)

line 59
Haal een enkele kolom op uit de eerste rij van de JSON-resultaatset en retourneer de waarde op de opgegeven kolomindex of false als deze niet is gevonden.
if (!$this->data) return false
$row = reset($this->data)
$vals = array_values((array)$row)
return $vals[$col] ?? false
method

%JSON_result -> rowCount

line 66
Geeft het aantal rijen in de JSON-resultaatset terug.
count($this->data)
object

%migrate

/phlo/resources/DB/migrate.phlo
version 1.0
creator q-ai.nl
summary Database migration runner
package database
frontend false
backend true
requires @DB
tags database migrate migrations sql schema
static

migrate :: setup ($db = null)

line 10
Stelt de database in door een `migrations`-tabel te maken als deze nog niet bestaat, die migratierecords bijhoudt.
$db ??= %MySQL
$db->query("CREATE TABLE IF NOT EXISTS `migrations` (`id` int unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `batch` int unsigned NOT NULL, `applied_at` int unsigned NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY (`name`))")
static

migrate :: applied ($db = null)

line 15
Haal de namen van toegepaste migraties op uit de 'migrations'-tabel in de MySQL-database, gesorteerd op ID in oplopende volgorde.
$db ??= %MySQL
return $db->column(table: 'migrations', columns: 'name', order: 'id ASC')
static

migrate :: run (string $path, $db = null)

line 20
Voert database-migraties uit door SQL-bestanden in een opgegeven map te verwerken en bijgehouden toegepaste migraties in een 'migrations'-tabel.
$db ??= %MySQL
static::setup($db)
$applied = static::applied($db)
$files = glob($path.'/*.sql')
sort($files)
$batch = $applied ? ($db->item(table: 'migrations', columns: 'MAX(batch)') + 1) : 1
$count = 0
foreach ($files AS $file){
	$name = basename($file, '.sql')
	if (in_array($name, $applied)) continue
	$sql = file_get_contents($file)
	foreach (array_filter(array_map('trim', explode(';', $sql))) AS $statement) $db->query($statement)
	$db->create('migrations', name: $name, batch: $batch, applied_at: time())
	$count++
}
return $count
static

migrate :: rollback ($db = null)

line 39
Rol de laatste batch van migraties terug door de bijbehorende vermeldingen uit de 'migrations'-tabel in de database te verwijderen.
$db ??= %MySQL
$batch = $db->item(table: 'migrations', columns: 'MAX(batch)')
if (!$batch) return 0
$names = $db->query('SELECT name FROM migrations WHERE batch=?', $batch)->fetchAll(\PDO::FETCH_COLUMN)
$db->delete('migrations', 'batch=?', $batch)
return count($names)
object

%model

/phlo/resources/DB/model.phlo
version 1.1
creator q-ai.nl
summary Phlo ORM class with unified columns and schema
type abstract class
package database
frontend false
backend true
requires @DB @MySQL apcu? audit?
tags orm model database records schema
static

model :: DB

line 11
Toegang tot de databaseverbinding voor het model, met als standaard %MySQL als deze niet expliciet is ingesteld.
%app->DB ?? %MySQL
static

model :: objRecords

line 12
Toegang tot de records van het model als een array van objecten.
[]
static

model :: objLoaded

line 13
Geeft aan of het object in het model is geladen.
[]
static

model :: objCache

line 14
De model::$objCache-eigenschap bevat een cache voor modelobjecten, waardoor de prestaties worden verbeterd door de noodzaak om dezelfde gegevens herhaaldelijk op te halen te verminderen.
false
static

model :: objRecordLimit

line 15
Stelt het maximale aantal records in dat door het model kan worden opgehaald.
10000
static

model :: objSoftDelete

line 16
De model::$objSoftDelete-eigenschap geeft aan of zachte verwijdering is ingeschakeld voor de modelinstantie, en retourneert false als dit niet het geval is.
false
static

model :: objAudit

line 17
De `model::$objAudit` eigenschap wordt gebruikt om het auditobject dat aan het model is gekoppeld te benaderen, waardoor het mogelijk is om wijzigingen en aanpassingen bij te houden.
false
static

model :: objValidate

line 18
De model::$objValidate-eigenschap geeft aan of de objectvalidatie is in- of uitgeschakeld, en retourneert false als de validatie niet actief is.
false
static

model :: objLastErrors

line 19
Toegang tot de laatste fouten die zijn vastgelegd voor de modelinstantie, en retourneert een array van foutmeldingen.
[]
static

model :: idColumn

line 20
De model::$idColumn-eigenschap geeft de naam van de identificatiekolom aan die in het model wordt gebruikt, standaard 'id'.
'id'
static

model :: idType

line 21
Definieert het gegevenstype voor de identifier van het model als een geheel getal.
'int'
static

model :: canView

line 23
Deze eigenschap geeft aan of de huidige gebruiker toestemming heeft om het model te bekijken.
true
static

model :: canCreate

line 24
De model::$canCreate-eigenschap geeft aan of er een nieuwe instantie van het model kan worden gemaakt.
true
static

model :: canChange

line 25
Deze eigenschap geeft aan of het model kan worden gewijzigd, en retourneert true als wijzigingen zijn toegestaan.
true
static

model :: canDelete

line 26
De model::$canDelete-eigenschap geeft aan of de modelinstantie kan worden verwijderd.
true
static

model :: state

line 28
De `model::$state` eigenschap bevat de interne status van een modelinstantie, inclusief metadata, records, laadstatus en opname van verwijderde records.
%req->model ??= obj(meta: [], records: [], loaded: [], includeDeleted: [])
static

model :: columns

line 29
Haal de kolommen op die in het model zijn gedefinieerd, hetzij vanuit de static::$columns-eigenschap of door de schema-methode aan te roepen als deze bestaat.
if (isset(static::$columns)) return static::$columns
if (!method_exists(static::class, 'schema')) return static::$table.'.*'
$state = static::state()
$key = spl_object_id(static::DB()).':'.static::DB()->fieldQuotes.':'.static::$table
return $state->meta[static::class]['columns'][$key] ??= static::_columns()
static

model :: _columns

line 36
Haal de kolomnamen op van de bijbehorende database-tabel van het model, geformatteerd met veldquotes.
$fq = static::DB()->fieldQuotes
$list = array_merge(...array_values(array_filter(loop(static::fields(), fn($field) => loop($field->objColumns, fn($col) => static::$table."$fq.$fq".$col)))))
return $fq.implode("$fq,$fq", $list).$fq
static

model :: fields

line 41
Geeft de velden terug die zijn gedefinieerd in het schema van het model, of een lege array als er geen schema bestaat. Als het schema beschikbaar is, worden de velden opgehaald uit de metadata van de status van het model.
if (!method_exists(static::class, 'schema')) return static::$fields ?? []
$state = static::state()
return $state->meta[static::class]['fields'] ??= static::_fields()
static

model :: _fields

line 46
Deze eigenschap haalt de velden op die in het schema van het model zijn gedefinieerd, terwijl het controleert op gereserveerde kolomnamen om conflicten te voorkomen.
$reserved = ['table','order','fields','columns','create','change','delete','records','record','column','item','pair','DB','objRecords','objLoaded','objCache','objState','objSave','objGet','objAudit','objValidate','objLastErrors','idColumn','idType']
$fields = loop(static::schema(), fn($field, $column) => last($field->name ??= $column, $field->type === 'parent' && $field->obj ??= $column, $field))
foreach ($reserved AS $word) isset($fields[$word]) && error("Reserved column name '$word' in ".static::class)
return $fields
static

model :: field ($name)

line 52
Toegang tot een specifiek veld dat is gedefinieerd in de statische veldenarray van het model met de opgegeven naam.
static::fields()[$name]
static

model :: create (...$args)

line 54
Maakt een nieuw record in de database aan na validatie van de invoer en het uitvoeren van eventuele gedefinieerde levenscyclushooks zoals beforeSave, beforeCreate, afterCreate en afterSave.
$class = static::class
if (static::objValidate() && !static::objRunValidation($args)) return null
$record = new $class(...$args)
method_exists(static::class, 'beforeSave') && $record->beforeSave()
method_exists(static::class, 'beforeCreate') && $record->beforeCreate()
$id = static::createRecord(...$args)
$record = static::record(id: $id)
method_exists(static::class, 'afterCreate') && $record->afterCreate()
method_exists(static::class, 'afterSave') && $record->afterSave()
static::objAudit() && %audit->log($record, 'create', [], (array)$record)
return $record
static

model :: objRunValidation ($data)

line 68
Valideert de verstrekte gegevens tegen de gedefinieerde velden van het model en verzamelt eventuele fouten die tijdens de validatie zijn aangetroffen.
$errors = []
$fields = static::fields()
foreach ($data AS $column => $value){
	if (!($field = $fields[$column] ?? null) || !method_exists($field, 'objValidate')) continue
	if ($error = $field->objValidate($value)) $errors[$column] = $error
}
static::$objLastErrors = $errors
return empty($errors)
static

model :: objErrors

line 79
Geeft de laatst geregistreerde fouten voor het model terug als een array. Als er geen fouten zijn geregistreerd, retourneert het een lege array.
static::$objLastErrors ?? []
static

model :: createRecord (...$args)

line 80
Maakt een nieuw record aan in de opgegeven database tabel met de meegeleverde argumenten.
static::DB()->create(static::$table, ...$args)
static

model :: change ($where, ...$args)

line 81
Voert een wijzigingsoperatie uit op de opgegeven database-tabel met de gegeven voorwaarden en argumenten.
static::DB()->change(static::$table, $where, ...$args)
static

model :: delete ($where, ...$args)

line 83
Verwijdert records uit de database-tabel die aan het model is gekoppeld, met de mogelijkheid om voor- en na-verwijderhooks te activeren, en ondersteunt zachte verwijderingen.
if (method_exists(static::class, 'beforeDelete') || method_exists(static::class, 'afterDelete') || static::objAudit()){
	$records = static::DB()->query('SELECT '.static::$table.'.* FROM '.static::$table.' WHERE '.$where, ...$args)->fetchAll(\PDO::FETCH_CLASS, static::class)
	foreach ($records AS $record) method_exists(static::class, 'beforeDelete') && $record->beforeDelete()
	if (static::objSoftDelete()) $result = static::DB()->change(static::$table, $where, ...array_values($args), deleted_at: time())
	else $result = static::DB()->delete(static::$table, $where, ...$args)
	foreach ($records AS $record){
		method_exists(static::class, 'afterDelete') && $record->afterDelete()
		static::objAudit() && %audit->log($record, 'delete', (array)$record, [])
	}
	return $result
}
if (static::objSoftDelete()) return static::DB()->change(static::$table, $where, ...array_values($args), deleted_at: time())
return static::DB()->delete(static::$table, $where, ...$args)
static

model :: objLogChange ($where, ...$args)

line 99
Logt wijzigingen die aan een record in de database zijn aangebracht, en controleert de vorige en huidige staat als auditing is ingeschakeld.
if (!static::objAudit()) return static::change($where, ...$args)
$old = static::records(where: $where)
$result = static::DB()->change(static::$table, $where, ...$args)
foreach ($old AS $record){
	$fresh = static::record(id: $record->id)
	$fresh && %audit->log($fresh, 'update', (array)$record, (array)$fresh)
}
return $result
method

%model -> objSave

line 110
Slaat het huidige object op in de database, waarbij een nieuw record wordt aangemaakt of een bestaand record wordt bijgewerkt, en daarbij levenscyclusmethoden zoals beforeSave, afterSave, beforeCreate, afterCreate, beforeChange en afterChange indien nodig aanroept.
$pk = static::idColumn()
$pkValue = $this->$pk ?? $this->id ?? null
$pkValue || error('Can\'t save '.static::class.' record without '.$pk)
$isNew = !static::item([$pk => $pkValue, 'columns' => $pk])
$old = $isNew ? null : clone $this
method_exists(static::class, 'beforeSave') && $this->beforeSave($old)
if ($isNew){
	method_exists(static::class, 'beforeCreate') && $this->beforeCreate()
	static::createRecord(...$this)
	$saved = static::record([$pk => $pkValue])
	method_exists(static::class, 'afterCreate') && $saved->afterCreate()
}
else {
	method_exists(static::class, 'beforeChange') && $this->beforeChange($old)
	static::change($pk.'=?', $pkValue, ...$this)
	$saved = static::record([$pk => $pkValue])
	method_exists(static::class, 'afterChange') && $saved->afterChange($old)
	static::objAudit() && %audit->log($saved, 'update', (array)$old, (array)$saved)
}
method_exists(static::class, 'afterSave') && $saved->afterSave($old)
return $saved
static

model :: transaction ($callback)

line 134
Voert een database-transactie uit met de opgegeven callbackfunctie, waarbij wordt gegarandeerd dat alle bewerkingen binnen de transactie succesvol worden voltooid voordat deze wordt bevestigd.
static::DB()->transaction($callback)
static

model :: query

line 135
Voert een query uit op de database van het model en retourneert de resultaten op basis van de opgegeven voorwaarden.
phlo('query', class: static::class)
static

model :: objIncludeDeleted

line 137
Deze eigenschap bepaalt of verwijderde records moeten worden opgenomen in de queryresultaten van het model, standaard op false als niet gespecificeerd.
static::state()->includeDeleted[static::class] ?? false
static

model :: objWithDeleted ($callback)

line 138
Deze methode stelt het model in staat om verwijderde records op te nemen in de queryresultaten door tijdelijk de status te wijzigen tijdens de uitvoering van een callbackfunctie.
$state = static::state()
$state->includeDeleted[static::class] = true
try {
	$result = $callback()
} finally {
	unset($state->includeDeleted[static::class])
}
return $result
static

model :: objRestore ($id)

line 148
Herstelt een soft-gedelete record in de database door de 'deleted_at' timestamp op null te zetten.
static::DB()->change(static::$table, static::idColumn().'=?', $id, deleted_at: null)
static

model :: column (...$args)

line 150
Toegang tot een specifieke kolom van de records die door het model zijn geladen, met behulp van de fetchAll-methode met de FETCH_COLUMN-optie van PDO.
static::recordsLoad($args, 'fetchAll', [\PDO::FETCH_COLUMN])
static

model :: item (...$args)

line 151
Laadt records uit de database met de opgegeven argumenten en fetch-modus, en retourneert een enkele kolom met gegevens.
static::recordsLoad($args, 'fetch', [\PDO::FETCH_COLUMN])
static

model :: pair (...$args)

line 152
Laadt records uit de database als een sleutel-waarde paar array met de opgegeven fetch-modus.
static::recordsLoad($args, 'fetchAll', [\PDO::FETCH_KEY_PAIR])
static

model :: records (...$args)

line 153
Haal alle records op uit het model, en laad ze als instanties van de modelklasse.
static::recordsLoad($args, 'fetchAll', [\PDO::FETCH_CLASS|\PDO::FETCH_UNIQUE, static::class], true)
static

model :: recordCount (...$args)

line 154
Geeft het totale aantal records in de database-tabel van het model terug.
static::item(...$args, columns: 'COUNT('.static::idColumn().')')
static

model :: record (...$args)

line 155
Haal een enkel record op uit de records van het model op basis van de opgegeven argumenten, en retourneer een fout als er meerdere records worden gevonden.
count($records = static::records(...$args)) > 1 ? error('Multiple records for '.static::class) : (current($records) ?: null)
static

model :: recordsLoad ($args, $fetch, $fetchMode, $saveRelations = false)

line 157
Laadt records uit de database op basis van gespecificeerde argumenten, past caching toe indien geconfigureerd, en beheert de status van geladen records.
$pk = static::idColumn()
$args['table'] ??= static::$table
$saveRelations && $args['columns'] ??= static::$table.'.'.$pk.' as _,'.static::columns()
isset(static::$joins) && debug && error('DEPRECATED: static $joins in '.static::class.'. Use getParent/getChildren/getMany instead.')
isset(static::$joins) && $args['joins'] = static::$joins.(isset($args['joins']) ? " $args[joins]" : void)
method_exists(static::class, 'where') && $args['where'] = static::where().(isset($args['where']) ? " AND $args[where]" : void)
static::objSoftDelete() && !static::objIncludeDeleted() && $args['where'] = 'deleted_at IS NULL'.(isset($args['where']) ? " AND $args[where]" : void)
isset(static::$group) && $args['group'] ??= static::$group
isset(static::$order) && $args['order'] ??= static::$order
if ($cacheKey = $args['cacheKey'] ?? null) unset($args['cacheKey'])
if ($duration = $args['cache'] ?? static::objCache()){
	unset($args['cache'])
	$cacheArgs = $args; ksort($cacheArgs)
	$records = apcu($cacheKey ?? static::class.slash.md5(json_encode($cacheArgs)), fn() => static::DB()->load(...$args)->$fetch(...$fetchMode), $duration === true ? 86400 : $duration)
}
else $records = static::DB()->load(...$args)->$fetch(...$fetchMode)
if ($saveRelations && $records){
	$state = static::state()
	$state->records[static::class] = ($state->records[static::class] ?? []) + array_column($records, null, $pk)
	count($state->records[static::class]) > static::objRecordLimit() && $state->records[static::class] = array_slice($state->records[static::class], -static::objRecordLimit(), preserve_keys: true)
}
return $records
static

model :: objRel ($key)

line 182
Toegang tot het relatie-object dat in het model is gedefinieerd, en retourneert metadata of roept een methode aan als deze bestaat.
$state = static::state()
return $state->meta[static::class][$key] ??= method_exists(static::class, $key) ? static::$key() : static::$$key ?? []
prop

%model -> objState

line 187
De `$objState`-eigenschap van het model bevat de staat van het object, inclusief zijn ouders, kinderen en veel-relaties, geïnitieerd als lege arrays.
['parents' => [], 'children' => [], 'many' => []]
method

%model -> objGet ($key)

line 188
Haal een object op dat is gekoppeld aan de opgegeven sleutel vanuit de ouder-, kind- of vele relaties in het model.
$this->getParent($key) ?? $this->getChildren($key) ?? $this->getMany($key)
method

%model -> objIn ($ids)

line 189
Converteert een array van ID's naar een door komma's gescheiden string, of retourneert 'NULL' als de array leeg is.
$ids ? dq.implode(dq.comma.dq, $ids).dq : 'NULL'
method

%model -> getParent ($key)

line 191
Haal het bovenliggende object op dat is gekoppeld aan een gegeven sleutel uit de status van het model, en laad het indien nodig.
if (array_key_exists($key, $this->objState['parents'])) return $this->objState['parents'][$key]
$state = static::state()
$parents = self::objRel('objParents')
if (!$relation = $parents[$key] ?? null) return
$isArray = is_array($relation)
$class = $isArray ? $relation['obj'] : $relation
$column = $isArray ? $relation['key'] ?? $key : $key
if (!$parentId = $this->objData[$column] ?? null) return $this->objState['parents'][$key] = null
if (!isset($state->records[$class][$parentId])){
	$idsToLoad = [$parentId => true]
	$allObjData = array_map(fn($record) => $record->objData, $state->records[static::class] ?? [])
	foreach ($parents as $pKey => $pRelation){
		$pIsArray = is_array($pRelation)
		$pClass = $pIsArray ? $pRelation['obj'] : $pRelation
		if ($pClass === $class) foreach (array_column($allObjData, $pIsArray ? $pRelation['key'] ?? $pKey : $pKey) as $pId) $pId && !isset($state->records[$class][$pId]) && $idsToLoad[$pId] = true
	}
	if ($idsToLoad = array_keys($idsToLoad)) $class::records(where: $class::idColumn().' IN ('.$this->objIn($idsToLoad).')')
}
$parentObject = $state->records[$class][$parentId] ?? null
return $this->objState['parents'][$key] = $parentObject
method

%model -> getChildren ($key)

line 214
Haal de kindobjecten op die zijn gekoppeld aan een gegeven sleutel uit de status van het model, en laad ze uit de database als ze nog niet zijn geladen.
if (array_key_exists($key, $this->objState['children'])) return $this->objState['children'][$key]
$state = static::state()
if (!$relation = self::objRel('objChildren')[$key] ?? null) return
$isArray = is_array($relation)
$class = $isArray ? $relation['obj'] : $relation
$column = $isArray ? $relation['key'] : static::objShortName()
if (!isset($state->loaded[static::class]['children'][$key])){
	$parentIds = array_keys($state->records[static::class] ?? [])
	if ($parentIds){
		$fq = static::DB()->fieldQuotes
		$children = $class::records(where: $fq.$column.$fq.' IN ('.$this->objIn($parentIds).')')
		foreach ($state->records[static::class] AS $parentRecord) $parentRecord->objState['children'][$key] = []
		foreach ($children AS $childId => $child) !is_null($pId = $child->objData[$column] ?? null) && isset($state->records[static::class][$pId]) && $state->records[static::class][$pId]->objState['children'][$key][$childId] = $child
	}
	$state->loaded[static::class]['children'][$key] = true
}
return $this->objState['children'][$key] ?? []
method

%model -> getMany ($key)

line 234
Haal meerdere gerelateerde records op die zijn gekoppeld aan een opgegeven sleutel uit de status van het model, en laad ze uit de database als ze nog niet zijn geladen.
if (array_key_exists($key, $this->objState['many'])) return $this->objState['many'][$key]
$state = static::state()
if (!$relation = self::objRel('objMany')[$key] ?? null) return
$class = $relation['obj']
if (!isset($state->loaded[static::class]['many'][$key])){
	$parentIds = array_keys($state->records[static::class] ?? [])
	if ($parentIds){
		$fq = static::DB()->fieldQuotes
		$lk = $relation['localKey']; $fk = $relation['foreignKey']
		$pivotRows = static::DB()->rows(table: $relation['table'], columns: $fq.$lk.$fq.comma.$fq.$fk.$fq, where: $fq.$lk.$fq.' IN ('.$this->objIn($parentIds).')')
		$targetIds = array_unique(array_map(fn($row) => $row->{$relation['foreignKey']}, $pivotRows ?: []))
		$targetRecords = $targetIds ? $class::records(where: $class::idColumn().' IN ('.$this->objIn($targetIds).')') : []
		foreach ($state->records[static::class] AS $parentRecord) $parentRecord->objState['many'][$key] = []
		foreach ($pivotRows ?: [] AS $row){
			$parentId = $row->$lk
			$foreignId = $row->$fk
			if (isset($state->records[static::class][$parentId]) && isset($targetRecords[$foreignId])) $state->records[static::class][$parentId]->objState['many'][$key][$foreignId] = $targetRecords[$foreignId]
		}
	}
	$state->loaded[static::class]['many'][$key] = true
}
return $this->objState['many'][$key] ?? []
method

%model -> getCount ($key)

line 259
Haal het aantal gerelateerde objecten op voor een opgegeven sleutel en cache het resultaat om toekomstige aanroepen te optimaliseren.
if (array_key_exists($key, $this->objState['counts'] ?? [])) return $this->objState['counts'][$key]
$state = static::state()
if ($relation = self::objRel('objChildren')[$key] ?? null){
	if (!isset($state->loaded[static::class]['children_count'][$key])){
			$parentIds = array_keys($state->records[static::class] ?? [])
			if ($parentIds){
				$isArray = is_array($relation)
				$class = $isArray ? $relation['obj'] : $relation
				$column = $isArray ? $relation['key'] : static::objShortName()
				$fq = static::DB()->fieldQuotes
				$counts = $class::pair(columns: $fq.$column.$fq.', COUNT(*)', where: $fq.$column.$fq.' IN ('.$this->objIn($parentIds).')', group: $fq.$column.$fq)
				foreach ($state->records[static::class] as $id => $record) $record->objState['counts'][$key] = (int)($counts[$id] ?? 0)
			}
			$state->loaded[static::class]['children_count'][$key] = true
	}
	return $this->objState['counts'][$key] ?? 0
}
if ($relation = self::objRel('objMany')[$key] ?? null){
	if (!isset($state->loaded[static::class]['many_count'][$key])){
		$parentIds = array_keys($state->records[static::class] ?? [])
		if ($parentIds){
			$fq = static::DB()->fieldQuotes
			$localKey = $relation['localKey']
			$counts = static::DB()->load(table: $relation['table'], columns: $fq.$localKey.$fq.',COUNT(*)', where: $fq.$localKey.$fq.' IN ('.$this->objIn($parentIds).')', group: $fq.$localKey.$fq)->fetchAll(\PDO::FETCH_KEY_PAIR)
			foreach ($state->records[static::class] as $id => $record) $record->objState['counts'][$key] = (int)($counts[$id] ?? 0)
		}
		$state->loaded[static::class]['many_count'][$key] = true
	}
	return $this->objState['counts'][$key] ?? 0
}
return 0
method

%model -> getLast ($key)

line 293
Haal het laatste kindobject op dat is gekoppeld aan een opgegeven sleutel uit de status van het model, en laad het als het nog niet eerder is geladen.
if (array_key_exists($key, $this->objState['last_child'] ?? [])) return $this->objState['last_child'][$key]
$state = static::state()
if ($relation = self::objRel('objChildren')[$key] ?? null){
	if (!isset($state->loaded[static::class]['last_child'][$key])){
		if ($parentIds = array_keys($state->records[static::class] ?? [])){
			$isArray = is_array($relation)
			$class = $isArray ? $relation['obj'] : $relation
			$column = $isArray ? $relation['key'] : static::objShortName()
			$childTable = $class::$table
			$fq = static::DB()->fieldQuotes
			$qt = $fq.$childTable.$fq
			$qc = $fq.$column.$fq
			$ids = $this->objIn($parentIds)
			$childPk = $class::idColumn()
			$joins = ' INNER JOIN (SELECT MAX('.$fq.$childPk.$fq.') AS last_id, '.$qc.' AS parent_id FROM '.$qt.' WHERE '.$qc.' IN ('.$ids.') GROUP BY '.$qc.') AS lcmax ON '.$qt.'.'.$fq.$childPk.$fq.' = lcmax.last_id'
			$lastChildren = $class::records(joins: $joins)
			foreach ($state->records[static::class] as $record) $record->objState['last_child'][$key] = null
			foreach ($lastChildren as $child) if (isset($state->records[static::class][$parentId = $child->objData[$column]])) $state->records[static::class][$parentId]->objState['last_child'][$key] = $child
		}
		$state->loaded[static::class]['last_child'][$key] = true
	}
	return $this->objState['last_child'][$key] ?? null
}
return null
static

model :: objResolveClass ($name)

line 320
Lost de klassenaam op voor het opgegeven modelobject, waardoor dynamische klasseverwerking in Phlo mogelijk is.
$name
static

model :: objShortName ($class = null)

line 321
Deze expressie haalt de naam van de huidige modelklasse op of de opgegeven klasse als deze bestaat, met gebruik van de statische context.
$class ?? static::class
static

model :: objParents

line 323
Geeft de ouderobjecten terug die zijn gekoppeld aan het huidige model, met gebruik van het gedefinieerde schema en het filteren van velden van het type 'parent'.
if (property_exists(static::class, 'objParents')) return static::$objParents
if (!method_exists(static::class, 'schema')) return []
return loop(array_filter(static::fields(), fn($f) => $f->type === 'parent'), fn($f, $c) => $f->key ? arr(obj: static::objResolveClass($f->obj), key: $f->key) : (static::objResolveClass($f->obj ?? $c)))
static

model :: objChildren

line 329
Geeft de kindobjecten terug die zijn gekoppeld aan het huidige model, waarbij het gedefinieerde schema wordt gebruikt en velden van het type 'child' worden gefilterd.
if (property_exists(static::class, 'objChildren')) return static::$objChildren
if (!method_exists(static::class, 'schema')) return []
return loop(array_filter(static::fields(), fn($f) => $f->type === 'child'), fn($f, $c) => $f->key ? arr(obj: static::objResolveClass($f->obj), key: $f->key) : (static::objResolveClass($f->obj ?? $c)))
static

model :: objMany

line 335
Geeft de 'objMany'-eigenschap terug als deze bestaat; anders wordt een array van gerelateerde objecten op basis van de schema-definitie opgehaald.
if (property_exists(static::class, 'objMany')) return static::$objMany
if (!method_exists(static::class, 'schema')) return []
return loop(array_filter(static::fields(), fn($f) => $f->type === 'many'), fn($f) => arr(obj: static::objResolveClass($f->obj), table: $f->table, localKey: $f->localKey ?? static::objShortName(), foreignKey: $f->foreignKey ?? $f->obj))
object

%MySQL

/phlo/resources/DB/MySQL.phlo
version 1.1
creator q-ai.nl
summary MySQL handler via DB class
extends DB
package database
frontend false
backend true
requires @DB creds:mysql php-ext:pdo php-ext:pdo_mysql
tags mysql pdo database sql
prop

%MySQL -> PDO

line 11
Maakt een nieuwe PDO-instantie aan voor het verbinden met een MySQL-database met behulp van de opgegeven referenties.
new \PDO('mysql:host='.%creds->mysql->host.';dbname='.%creds->mysql->database, %creds->mysql->user, %creds->mysql->password)
prop

%MySQL -> objPers

line 12
Deze expressie wijst de waarde 'true' toe aan de eigenschap '$objPers' van het MySQL-object.
true
object

%PostgreSQL

/phlo/resources/DB/PostgreSQL.phlo
version 1.0
creator q-ai.nl
summary PostgreSQL resource
extends DB
package database
frontend false
backend true
requires @DB creds:postgresql php-ext:pdo php-ext:pdo_pgsql
tags postgresql pdo database sql
prop

%PostgreSQL -> PDO

line 11
Maakt een nieuwe PDO-instantie aan voor het verbinden met een PostgreSQL-database met de opgegeven inloggegevens.
new PDO('pgsql:host='.%creds->postgresql->host.';dbname='.%creds->postgresql->database, %creds->postgresql->user, %creds->postgresql->password)
prop

%PostgreSQL -> fieldQuotes

line 12
Geeft de veldnaam terug, omgeven door dubbele aanhalingstekens voor PostgreSQL-compatibiliteit.
dq
object

%Qdrant

/phlo/resources/DB/Qdrant.phlo
version 1.0
creator q-ai.nl
summary Embeddings resource with Qdrant
package ai
frontend false
backend true
requires @AI creds:qdrant apcu
tags qdrant embeddings vector search ai
method

%Qdrant -> get (string $input, ?string $model = null)

line 10
Haal een embedding op voor de gegeven invoerstring met behulp van het opgegeven model, en cache het resultaat gedurende 28 dagen.
apcu('embedding/'.token(input: $input), fn($input) => %AI->embedding(input: $input, model: $model), 86400 * 28)
method

%Qdrant -> collections

line 12
Haal een array van collectie namen op uit de Qdrant API-respons.
array_column($this->request('collections')->result->collections, 'name')
method

%Qdrant -> create ($collection, $size = 1536, $distance = 'Cosine')

line 13
Maakt een nieuwe collectie aan in Qdrant met de opgegeven vectorgrootte en afstandsmetrieken.
$this->request("collections/$collection", PUT: arr(vectors: arr(size: $size, distance: $distance)))->status === 'ok'
method

%Qdrant -> upsert ($collection, $id, $input, ...$payload)

line 14
Deze functie werkt een punt bij of voegt een punt toe in een opgegeven Qdrant-collectie met behulp van de opgegeven ID en invoervector, samen met optionele payloadgegevens.
$this->request("collections/$collection/points", PUT: arr(points: [arr(id: $id, vector: $this->get($input), payload: $payload ?: null)]))->result->operation_id
method

%Qdrant -> delete ($collection, ...$ids)

line 15
Verwijdert opgegeven punten uit een Qdrant-collectie op basis van hun ID's.
$this->request("collections/$collection/points/delete", POST: arr(points: $ids))->result
method

%Qdrant -> search ($collection, $input = null, $top = 100)

line 16
Zoekt naar punten in de opgegeven Qdrant-collectie op basis van de invoervector en retourneert de beste resultaten.
create($this->request("collections/$collection/points/search", POST: arr(vector: is_null($input) ? array_fill(0, 1536, 0) : $this->get($input), top: $top, with_payload: true))->result, fn($record) => $record->id, fn($record) => last($record = array_merge(get_object_vars($record), get_object_vars($record->payload)), obj(...array_filter($record, fn($key) => $key !== 'payload', ARRAY_FILTER_USE_KEY))))
method

%Qdrant -> drop ($collection)

line 17
Verwijdert de opgegeven collectie uit Qdrant door een DELETE-verzoek naar de juiste endpoint te sturen.
$this->request("collections/$collection", DELETE: true)->result
method

%Qdrant -> request ($uri, ...$data)

line 19
Verzendt een HTTP-verzoek naar de opgegeven Qdrant-server-URI met optionele gegevens en retourneert de gedecodeerde JSON-reactie.
json_decode(HTTP(%creds->qdrant->server.$uri, %creds->qdrant->key ? ['api-key: '.%creds->qdrant->key] : [], true, ...$data))
object

%query

/phlo/resources/DB/query.phlo
version 1.0
creator q-ai.nl
summary Fluent query builder for Phlo ORM
package database
frontend false
backend true
requires @DB
tags query builder orm database sql
prop

%query -> class

line 10
Haal het type van de huidige query-object op.
prop

%query -> conditions

line 11
Definieert voorwaarden voor het filteren van resultaten in een query.
[]
prop

%query -> bindings

line 12
De `query->$bindings` haalt de bindings op die aan een query zijn gekoppeld in Phlo, waardoor toegang wordt verkregen tot de parameters die zijn gebruikt bij de uitvoering van de query.
[]
prop

%query -> orderBy

line 13
Geeft het veld op waarop de resultaten van een query moeten worden gesorteerd.
prop

%query -> limitVal

line 14
Stelt het maximale aantal resultaten in dat uit een query in Phlo moet worden geretourneerd.
prop

%query -> offsetVal

line 15
Haal de huidige offsetwaarde op voor paginering in een query.
method

%query -> fq

line 16
Deze expressie haalt de veldquotes op uit de databaseklasse die aan de huidige instantie is gekoppeld, of valt terug op 'bt' als de klasse niet is ingesteld.
($class = $this->class) ? $class::DB()->fieldQuotes : bt
method

%query -> q ($column)

line 17
Valideert de opgegeven kolomnaam voor de query builder en formatteert deze door elk deel te omringen met de volledig gekwalificeerde naam.
preg_match('/^[A-Za-z_][A-Za-z0-9_.]*$/', $column) || error("Invalid column for query builder: $column")
$fq = $this->fq
return implode(dot, array_map(fn($part) => $fq.$part.$fq, explode(dot, $column)))
method

%query -> eq ($column, $value)

line 23
Filtert de queryresultaten om alleen diegene op te nemen waar de opgegeven kolom gelijk is aan de gegeven waarde.
$this->where($this->q($column)." = ?", $value)
method

%query -> neq ($column, $value)

line 24
Filtert resultaten waarbij de opgegeven kolom niet gelijk is aan de gegeven waarde.
$this->where($this->q($column)." != ?", $value)
method

%query -> gt ($column, $value)

line 25
Voegt een voorwaarde toe aan de query die resultaten filtert waarbij de opgegeven kolom groter is dan de gegeven waarde.
$this->where($this->q($column)." > ?", $value)
method

%query -> gte ($column, $value)

line 26
Genereert een queryvoorwaarde die controleert of de waarde van de opgegeven kolom groter dan of gelijk is aan een gegeven waarde.
$this->where($this->q($column)." >= ?", $value)
method

%query -> lt ($column, $value)

line 27
Voegt een voorwaarde toe aan de query om resultaten te filteren waarbij de opgegeven kolom kleiner is dan de gegeven waarde.
$this->where($this->q($column)." < ?", $value)
method

%query -> lte ($column, $value)

line 28
Voegt een voorwaarde toe aan de query die resultaten filtert waarbij de opgegeven kolom kleiner dan of gelijk is aan de gegeven waarde.
$this->where($this->q($column)." <= ?", $value)
method

%query -> like ($column, $value)

line 29
Voegt een voorwaarde toe aan de query die controleert of de opgegeven kolom een waarde bevat die lijkt op de opgegeven waarde met behulp van de SQL LIKE-operator.
$this->where($this->q($column)." LIKE ?", $value)
method

%query -> in ($column, array $values)

line 30
Filtert de queryresultaten om alleen die records op te nemen waarvan de waarde van de opgegeven kolom in de opgegeven array van waarden voorkomt.
$this->where($this->q($column)." IN (".implode(',', array_fill(0, count($values), '?')).")", ...$values)
method

%query -> isNull ($column)

line 31
Controleert of de opgegeven kolom in de query null is.
$this->where($this->q($column)." IS NULL")
method

%query -> notNull ($column)

line 32
Voegt een voorwaarde toe aan de query om ervoor te zorgen dat de opgegeven kolom niet null is.
$this->where($this->q($column)." IS NOT NULL")
method

%query -> between ($column, $min, $max)

line 33
Filtert resultaten om alleen diegene op te nemen waarbij de waarde van de opgegeven kolom tussen de gegeven minimum- en maximumwaarden ligt.
$this->where($this->q($column)." BETWEEN ? AND ?", $min, $max)
method

%query -> raw ($sql, ...$bindings)

line 34
Voert een ruwe SQL-query uit met de opgegeven bindings, waardoor dynamische queryconstructie mogelijk is.
$this->where($sql, ...$bindings)
method

%query -> where ($condition, ...$values)

line 35
Voegt een voorwaarde toe aan de query met de opgegeven waarden voor binding. Het maakt dynamische filtering van resultaten mogelijk op basis van de opgegeven voorwaarde.
$this->conditions[] = $condition
foreach ($values AS $v) $this->bindings[] = $v
return $this
method

%query -> order ($order)

line 41
Stelt de volgorde voor de query in met de opgegeven $order-waarde en retourneert de huidige instantie.
$this->orderBy = $order
return $this
method

%query -> limit ($limit)

line 46
Stelt het maximum aantal resultaten in dat uit een query moet worden geretourneerd, gedefinieerd door de $limit parameter.
$this->limitVal = $limit
return $this
method

%query -> offset ($offset)

line 51
Stelt de offsetwaarde voor de query in, waardoor paginering van resultaten mogelijk is.
$this->offsetVal = $offset
return $this
method

%query -> build

line 55
Bouwt een argumentarray voor een query op basis van opgegeven voorwaarden, volgorde, limiet en bindingen voor gebruik in databasebewerkingen.
$where = $this->conditions ? implode(' AND ', $this->conditions) : void
$limit = $this->limitVal ? ($this->offsetVal ? "$this->offsetVal,$this->limitVal" : "$this->limitVal") : void
$args = ['where' => $where ?: void, 'order' => $this->orderBy ?: void, 'limit' => $limit ?: void]
foreach ($this->bindings AS $b) $args[] = $b
return $args
prop

%query -> records

line 63
Haal een verzameling records op uit de opgegeven klasse met behulp van de verstrekte bouwparameters.
($class = $this->class) && $class::records(...$this->build)
prop

%query -> record

line 64
Haal een record op uit de opgegeven klasse met behulp van de verstrekte bouwparameters.
($class = $this->class) && $class::record(...$this->build)
prop

%query -> column

line 65
Toegang tot een specifieke kolom van een queryresultaatset met behulp van de gedefinieerde klasse en buildparameters.
($class = $this->class) && $class::column(...$this->build)
prop

%query -> item

line 66
Haal een item op uit een klasse met behulp van de opgegeven bouwparameters.
($class = $this->class) && $class::item(...$this->build)
prop

%query -> count

line 67
Geeft het totale aantal records in de opgegeven klasse terug met behulp van de recordCount-methode.
($class = $this->class) && $class::recordCount(...$this->build)
method

%query -> delete

line 68
Verwijdert records uit de database op basis van opgegeven voorwaarden. Als er geen voorwaarden zijn opgegeven, wordt er een foutmelding weergegeven.
$class = $this->class
$where = $this->conditions ? implode(' AND ', $this->conditions) : error('Cannot delete without conditions')
return $class::delete($where, ...$this->bindings)
object

%SQLite

/phlo/resources/DB/SQLite.phlo
version 1.0
creator q-ai.nl
summary SQLite resource
extends DB
package database
frontend false
backend true
requires @DB php-ext:pdo php-ext:pdo_sqlite
tags sqlite pdo database sql
static

SQLite :: __handle

line 11
Deze eigenschap bevat de handle naar de SQLite-databaseverbinding, waarmee interactie met de database mogelijk is.
"SQLite/$file"
method

%SQLite -> __construct (private string $file)

line 12
Initialiseert een nieuwe SQLite-instantie met het opgegeven databasebestand.
prop

%SQLite -> PDO

line 13
Maakt een nieuwe PDO-instantie voor SQLite met het opgegeven bestand.
new PDO('sqlite:'.$this->file)

We gebruiken essentiële cookies om deze site te laten werken. Met uw toestemming gebruiken we ook analytics om de site te verbeteren.