Models: Unterschied zwischen den Versionen
Aus Contao Community Documentation
Psi (Diskussion | Beiträge) (→Was sind Models) |
Psi (Diskussion | Beiträge) (→Verwendung) |
||
Zeile 17: | Zeile 17: | ||
= Verwendung = | = Verwendung = | ||
− | + | == Erstellung einer Model-Instanz == | |
+ | Folgend wird eine Instanz von ''ArticleModel'' erstellt, welche eine bestimmte Entität der Tabelle ''tl_article'' referenziert. | ||
+ | |||
+ | <source lang="php"> | ||
+ | // ArticleModel mit den Daten der Entität id=5 erstellen | ||
+ | $objArticleModel = \ArticleModel::findByPk(5); | ||
+ | |||
+ | // ArticleModel mit den Daten der Entität alias='contact' erstellen | ||
+ | $objArticleModel = \ArticleModel::findByIdOrAlias('contact'); | ||
+ | // alternativ | ||
+ | $objArticleModel = \ArticleModel::findOneBy('alias','contact'); | ||
+ | // alternativ | ||
+ | $objArticleModel = \ArticleModel::findOneByAlias('contact'); | ||
+ | // alternativ | ||
+ | $objArticleModel = \ArticleModel::find( | ||
+ | array ( | ||
+ | 'limit' => 1, | ||
+ | 'column' => 'alias', // mehrere Spalten durch array() möglich | ||
+ | 'value' => 'contact', // mehrere Werte durch array() möglich, Reiehenfolge analog 'column' | ||
+ | 'return => 'Model' | ||
+ | ) | ||
+ | ); | ||
+ | </source> | ||
+ | |||
+ | Die oben verwendeten Methoden sind durch die Contao-Model Klasse implementiert. Sie können intern von einem speziellen Model wie das ''ArticleModel'' genutzt werden um weitere Constraints in Methoden zu kapseln. Bsp.: ''ArticleModel::findPublishedById()''. | ||
+ | |||
+ | ''findOneBy'''Alias''()''' ist eine virtuelle Methode um auf das '''alias''' Feld zu referenzieren. Diese Methoden existieren für jedes Feld der Tabelle. | ||
+ | Bsp: findOneByName() | ||
+ | Ich persönlich empfehle aber ''findOneBy($col, $val)'' zu nutzen. | ||
+ | |||
+ | Die statische Basismethode ''''find($arrData)''' ermöglicht eine genaue Spezifizierung der Anfrage. Alle anderen find-Methoden werden auf sie abgebildet. | ||
+ | |||
+ | Die Methode akzeptiert ein Array mit folgenden Schlüsseln: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | | '''column''' || ''string|array'' || Feld(er) zur Selektion (WHERE) | ||
+ | | '''value''' || ''string|array'' || Wert(e) zur Selektion (WHERE) | ||
+ | | '''limit''' || ''int'' || Beschränkt die Ergebnismenge (LIMIT) | ||
+ | | '''offset''' || ''int'' || Offset einer beschränkten Ergebnismenge (LIMIT) | ||
+ | | '''order''' || ''string'' || Sortierung der Ergebnismenge (ORDER BY) | ||
+ | |} | ||
= Relationen / Datensätze aus Fremndtabellen = | = Relationen / Datensätze aus Fremndtabellen = |
Version vom 16. Februar 2013, 16:03 Uhr
Unvollständiger Artikel: dieser Artikel ist noch nicht sauber bearbeitet.
Bitte erweitere ihn und entferne erst anschliessend diesen Hinweis. |
betrifft | |
---|---|
Contao Version | 3.0.0 |
Models von Contao3 nutzen und verstehen
Inhaltsverzeichnis
Was sind Models
Ein Model ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus. Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.
Mehrere Models werden durch eine Collection referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. Beispiel: Der Author (UserModel) eines Artikels (ArticleModel).
Verwendung
Erstellung einer Model-Instanz
Folgend wird eine Instanz von ArticleModel erstellt, welche eine bestimmte Entität der Tabelle tl_article referenziert.
// ArticleModel mit den Daten der Entität id=5 erstellen $objArticleModel = \ArticleModel::findByPk(5); // ArticleModel mit den Daten der Entität alias='contact' erstellen $objArticleModel = \ArticleModel::findByIdOrAlias('contact'); // alternativ $objArticleModel = \ArticleModel::findOneBy('alias','contact'); // alternativ $objArticleModel = \ArticleModel::findOneByAlias('contact'); // alternativ $objArticleModel = \ArticleModel::find( array ( 'limit' => 1, 'column' => 'alias', // mehrere Spalten durch array() möglich 'value' => 'contact', // mehrere Werte durch array() möglich, Reiehenfolge analog 'column' 'return => 'Model' ) );
Die oben verwendeten Methoden sind durch die Contao-Model Klasse implementiert. Sie können intern von einem speziellen Model wie das ArticleModel genutzt werden um weitere Constraints in Methoden zu kapseln. Bsp.: ArticleModel::findPublishedById().
findOneByAlias() ist eine virtuelle Methode um auf das alias Feld zu referenzieren. Diese Methoden existieren für jedes Feld der Tabelle. Bsp: findOneByName() Ich persönlich empfehle aber findOneBy($col, $val) zu nutzen.
Die statische Basismethode 'find($arrData) ermöglicht eine genaue Spezifizierung der Anfrage. Alle anderen find-Methoden werden auf sie abgebildet.
Die Methode akzeptiert ein Array mit folgenden Schlüsseln:
column | array | Feld(er) zur Selektion (WHERE) | value | array | Wert(e) zur Selektion (WHERE) | limit | int | Beschränkt die Ergebnismenge (LIMIT) | offset | int | Offset einer beschränkten Ergebnismenge (LIMIT) | order | string | Sortierung der Ergebnismenge (ORDER BY) |
Relationen / Datensätze aus Fremndtabellen
Für die Funktion der relations-Magic muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:
class ArticleModel extends \Model { /** * Table name * @var string */ protected static $strTable = 'tl_article'; ...
In der DCA-Struktur wird die Relation definiert
Angenommen wir haben ein Model das einen Datensatz aus tl_article referenziert.
$GLOBALS['TL_DCA']['tl_article'] = array ( ... // Fields 'fields' => array ( 'pid' => array ( 'foreignKey' => 'tl_page.title', 'sql' => "int(10) unsigned NOT NULL default '0'", 'relation' => array('type'=>'belongsTo', 'load'=>'lazy') ), 'author' => array ( 'label' => &$GLOBALS['TL_LANG']['tl_article']['author'], 'default' => $this->User->id, 'exclude' => true, 'inputType' => 'select', 'foreignKey' => 'tl_user.name', 'eval' => array('doNotCopy'=>true, 'mandatory'=>true, 'chosen'=>true, 'includeBlankOption'=>true, 'tl_class'=>'w50'), 'sql' => "int(10) unsigned NOT NULL default '0'", 'relation' => array('type'=>'hasOne', 'load'=>'eager') ),
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';