Beitragsdatum | 11.01.2024 |
---|---|
Letzte Aktualisierung | - |
Betrifft | xataface, div. Versionen |
Xataface ist ein Framework, um schnell und einfach komplexe Datenbankanwendungen bauen zu können.
MySQL bietet sogenannte Views an. Damit lassen sich komplexe Abfragen einer Datenbank einmalig als eine Art Alias generieren, die Nutzenden damit wie eine normale Tabelle zur Verfügung stehen.
Anders ausgedrückt: mit einer View kann man eine dynamische Tabelle generieren und so die Daten so darstellen, wie man das möchte.
Auch Xataface kann mit Views arbeiten.
Eine View wird in der Datenbank eingerichtet: dev.mysql.com
Beispiel
# Tabelle erstellen CREATE TABLE tabelle (name VARCHAR(30), vorname VARCHAR(30), anzahl INT, preis INT); # Daten eingeben INSERT INTO tabelle VALUES("Musterfrau", "Petra", 5, 10), ("Schmitt", "Anton", 4, 12); # Tabelle ausgeben SELECT * FROM tabelle; +------------+---------+--------+-------+ | name | vorname | anzahl | preis | +------------+---------+--------+-------+ | Musterfrau | Petra | 5 | 10 | | Schmitt | Anton | 4 | 12 | +------------+---------+--------+-------+ # View einrichten CREATE VIEW ansicht AS SELECT name, anzahl, preis, anzahl*preis AS kosten FROM tabelle; # View ausgeben SELECT * FROM ansicht; +------------+--------+-------+--------+ | name | anzahl | preis | kosten | +------------+--------+-------+--------+ | Musterfrau | 5 | 10 | 50 | | Schmitt | 4 | 12 | 48 | +------------+--------+-------+--------+
Diese View zeigt also eine Untermenge der Daten aus der Tabelle an und berechnet eine neue Spalte.
Diese View möchten wir nun in Xataface anzeigen können.
Die View wird in Xataface genauso behandelt, wie eine Tabelle. Daher muss als erstes ein entsprechendes Verzeichnis angelegt werden:
mkdir tables/ansicht
Nun wird die fields.ini
angelegt und befüllt:
vim tables/ansicht/fields.ini # einfügen [name] Key=PRI
Die Angabe Key=PRI ist wichtig, damit Xataface weiß, welche Spalte als Primary Key genutzt werden soll. In der Realität ist die Nutzung von name ein schlechter Schlüssel, da sich der Name wiederholen könnte. Hier kann beispielsweise zusätzlich in die View einfach der bestehende Primary Key aus der Quelltabelle genutzt werden.
Die View (aus Sicht von Xataface handelt es sich um eine Tabelle) ist in der conf.ini
anzulegen:
[_tables] tabelle = "Tabelle" ansicht = "Ansicht"
Und damit ist die View als Tabelle sicht- und nutzbar in Xataface.
Änderungen an den Daten in der View führen zu Änderungen an den Daten in der (Original-)Quelle. Soll das verhindert werden, kann die gesamte View auf READ ONLY gesetzt werden. Das wird in der Tabellen-Klasse umgesetzt:
# File: tables/ansicht/ansicht.php <?php class tables_ansicht { [...] function getPermissions(Dataface_Record $record = null){ return Dataface_PermissionsTool::READ_ONLY(); } [...] }
Achtung: mögliche Seiteneffekte
Werden Rollen auf diese Weise generell einer Ansicht/Tabelle zugeordnet, überschreibt die hier eingestellte Rolle auf dieser Ansicht/Tabelle die Rolle, mit der der Benutzer angemeldet ist.
Das kann dazu führen, dass Actions (siehe Xataface Definitive Guide) , die über eine sogenannte permission
gesteuert werden, nicht mehr erwartungsgemäß funktionieren. Nämlich genau dann, wenn die Ansicht/Tabelle geöffnet ist und damit die Rolle des Nutzers überschrieben wurde.
Actions, die der Nutzer sehen sollte, sind dann nicht mehr sichtbar. Erst, wenn er eine andere Tabelle/Ansicht öffnet (ohne Rolleneinschränkung), werden die Actions wieder sichtbar.
Quellen:
Ähnliche Themen im blog:
xataface, sql