Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Entwicklungsframework Yii Framework-Tutorial (26) Beispiel für einen Database-Active Record

PHP-Entwicklungsframework Yii Framework-Tutorial (26) Beispiel für einen Database-Active Record

黄舟
黄舟Original
2017-01-22 09:27:501688Durchsuche

Verwenden Sie Java oder .Net, um Datenbankanwendungen zu schreiben, die das Lesen und Schreiben von Datenbanken in Form von Objekten (ORM) und Active Record (AR) erheblich vereinfachen können von Yii Es ist auch eine beliebte objektrelationale Mapping-Technologie (ORM). Jede AR-Klasse stellt eine Datentabelle (oder Ansicht) dar, die Spalten der Datentabelle (oder Ansicht) werden in der AR-Klasse als Attribute der Klasse widergespiegelt und eine AR-Instanz stellt eine Zeile in der Tabelle dar. Gängige CRUD-Operationen werden als AR-Methoden implementiert. Daher können wir objektorientierter auf die Daten zugreifen.

Ändern Sie hier das Datenbank-DAO-Beispiel des Yii Framework Development Tutorial (24), um zu sehen, wie die Employee-Tabelle mithilfe von Active Record gelesen wird.

Um auf eine Datentabelle zuzugreifen, müssen wir zunächst eine AR-Klasse definieren, indem wir CActiveRecord integrieren. Jede AR-Klasse repräsentiert eine separate Datentabelle und eine AR-Instanz repräsentiert eine Zeile in dieser Tabelle.

Da auf AR-Klassen häufig an mehreren Stellen verwiesen wird, können wir das gesamte Verzeichnis mit den AR-Klassen importieren, anstatt sie einzeln zu importieren. Wenn sich beispielsweise alle unsere AR-Klassendateien im Verzeichnis protected/models befinden, können wir die Anwendung wie folgt konfigurieren:

'import'=>array(
'application.models.*',
),

In diesem Beispiel wird die Employee-Klasse wie folgt definiert:

class Employee extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'Employee';
}
}

Datentabelle Auf die Werte der Spalten in der Zeile kann als Eigenschaften der entsprechenden AR-Instanz zugegriffen werden. Beispielsweise kann $employee->EmployeeId auf das EmployeeId-Feld von Employee zugreifen.

Dieses Beispiel liest nur die Employee-Tabelle und ändert die indexAction-Methode von SiteController:

public function
actionIndex(){$model = Employee::model()->findAll();
$this->render('index', array('model' => $model,
));}

Sie können sehen, dass nur eine Codezeile Employee::model()->findAll( ) realisiert das Lesen Nehmen Sie die Datenbanktabelle und weisen Sie die Funktion Werte zu. Schauen wir uns den entsprechenden Code zum Anzeigen von Datensätzen an:

{
echo 'EmployeeId:' . $employee->EmployeeId . '';echo 'First Name:' . $employee->FirstName . '';
echo 'Last Name:' . $employee->LastName . '';echo 'Title:' . $employee->Title . '';
echo 'Address:' . $employee->Address . '';echo 'Email:' . $employee->Email . '';
echo '----------------------';}
?>

Sie können sehen, dass Sie mit AR über das Feld direkt auf einen Feldwert zugreifen können Name der Datenbanktabelle (Groß- und Kleinschreibung beachten). Es ist nicht erforderlich, ihn in der Klasse Employee zu definieren, wodurch der Code erheblich vereinfacht wird.

Als ich Model vorhin vorstellte, sagte ich, dass CModel zwei Unterklassen hat, eine ist FormModel und die andere ist CActiveRecord, die CRUD-Methoden für den Datenbankzugriff definiert, wie zum Beispiel

Datensatz erstellen

Um neue Zeilen in die Datentabelle einzufügen, müssen wir eine Instanz der entsprechenden AR-Klasse erstellen, ihre Eigenschaften in Bezug auf die Spalten der Tabelle festlegen und dann die Methode save() aufrufen, um das Einfügen abzuschließen

$employee=new Employee;
$employee->FirstName='James';
$employee->LastName='Shen';
...
$employee->save();

Wenn die Tabelle Der Primärschlüssel wird automatisch inkrementiert und nach Abschluss des Einfügens enthält die AR-Instanz einen aktualisierten Primärschlüssel. Wenn eine Spalte in der Tabellenstruktur über einen statischen Standardwert (z. B. eine Zeichenfolge, eine Zahl) definiert wird.

Datensätze lesen

Um die Daten in der Datentabelle zu lesen, können wir eine der Suchreihenmethoden wie folgt aufrufen

// Datensätze suchen, die den angegebenen Anforderungen entsprechen Bedingungen Die erste Zeile im Ergebnis
$post=Post::model()->find($condition,$params);
// Finde die Zeile mit dem angegebenen Primärschlüsselwert
$post = Post::model()->findByPk($postID,$condition,$params);
// Zeilen mit angegebenen Attributwerten finden
$post=Post::model()->findByAttributes( $attributes,$condition,$params);
// Finden Sie die erste Zeile im Ergebnis über die angegebene SQL-Anweisung
$post=Post::model()->findBySql($sql,$params) ;Wie oben gezeigt, rufen wir die Find-Methode über Post::model() auf. Denken Sie daran, dass die statische Methode model() für jede AR-Klasse erforderlich ist. Diese Methode gibt eine AR-Instanz im Objektkontext für den Zugriff auf Methoden auf Klassenebene zurück (so etwas wie statische Klassenmethoden).

Wenn die Suchmethode eine Zeile findet, die die Abfragebedingungen erfüllt, gibt sie eine Post-Instanz zurück, deren Attribute die Werte der entsprechenden Spalten in der Datentabellenzeile enthalten. Den geladenen Wert können wir dann wie eine normale Objekteigenschaft lesen, zum Beispiel echo $post->title;.

Wenn mit den angegebenen Abfragekriterien nichts in der Datenbank gefunden wird, gibt die Suchmethode null zurück.

Beim Aufruf von find verwenden wir $condition und $params, um die Abfragebedingungen anzugeben. Dabei kann $condition ein WHERE-String in der SQL-Anweisung sein und $params ist ein Array von Parametern, deren Werte an die Platzhalter in $condation gebunden werden sollen.

Datensatz aktualisieren

Nachdem die AR-Instanz die Spaltenwerte ausgefüllt hat, können wir sie ändern und wieder in der Datentabelle speichern.

$post=Post::model()->findByPk(10);
$post->title='new post title';
$post->save(); // 将更改保存到数据库删除记录

Wenn eine AR-Instanz mit einer Datenzeile gefüllt ist, können wir diese Datenzeile auch löschen

$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10
$post->delete(); // 从数据表中删除此行注意,删除之后, AR 实例仍然不变,但数据表中相应的行已经没了

Weitere Informationen finden Sie in der chinesischen Dokumentation von Yii (http ://www.yiiframework.com /doc/guide/1.1/zh_cn/database.ar), das hier nicht im Detail wiederholt wird.

In diesem Beispiel werden die Ergebnisse angezeigt:

PHP-Entwicklungsframework Yii Framework-Tutorial (26) Beispiel für einen Database-Active Record

Das Obige ist der Inhalt des PHP-Entwicklungsframeworks Yii Framework-Tutorial (26) Datenbank-Active Record-Beispiel Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn