Framework de développement PHP Tutoriel Yii Framework (26) Exemple de Database-Active Record

黄舟
Libérer: 2023-03-05 09:06:02
original
1756 Les gens l'ont consulté

Utilisez Java ou .Net pour écrire des applications de base de données. De nombreuses personnes ont utilisé Hibernate (ou NHibernate), ce qui peut grandement simplifier la programmation de bases de données sous forme d'objets (ORM), Active Record (AR) fourni. par Yii Il s'agit également d'une technologie de cartographie objet-relationnelle (ORM) populaire. Chaque classe AR représente une table de données (ou vue), les colonnes de la table de données (ou vue) sont reflétées dans la classe AR en tant qu'attributs de la classe et une instance AR représente une ligne dans la table. Les opérations CRUD courantes sont implémentées en tant que méthodes AR. Par conséquent, nous pouvons accéder aux données de manière plus orientée objet.

Modifiez l'exemple de base de données-DAO du didacticiel de développement du framework Yii (24) ici pour voir comment lire la table Employee à l'aide d'Active Record.

Pour accéder à une table de données, il faut d'abord définir une classe AR en intégrant CActiveRecord. Chaque classe AR représente une table de données distincte et une instance AR représente une ligne de cette table.

Étant donné que les classes AR sont souvent référencées à plusieurs endroits, nous pouvons importer l'intégralité du répertoire contenant les classes AR au lieu de les importer une par une. Par exemple, si tous nos fichiers de classe AR sont dans le répertoire protected/models, nous pouvons configurer l'application comme suit :

'import'=>array(
'application.models.*',
),
Copier après la connexion

Cet exemple définit la classe Employee comme suit :

class Employee extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'Employee';
}
}
Copier après la connexion

Tableau de données Les valeurs des colonnes de la ligne sont accessibles en tant que propriétés de l'instance AR correspondante. Par exemple, $employee->EmployeeId peut accéder au champ EmployeeId de Employee.

Cet exemple lit uniquement la table Employee et modifie la méthode indexAction de SiteController :

public function
actionIndex(){$model = Employee::model()->findAll();
$this->render('index', array('model' => $model,
));}
Copier après la connexion

Vous pouvez voir qu'une seule ligne de code Employee::model()->findAll( ) réalise la lecture Prenez la table de la base de données et attribuez la fonction de valeur, regardons le code correspondant pour afficher les enregistrements :

{
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 '----------------------';}
?>
Copier après la connexion

Vous pouvez voir qu'en utilisant AR, vous pouvez accéder directement à une valeur de champ via le champ nom de la table de la base de données (sensible à la casse). Il n'est pas nécessaire de la définir dans la classe Employee, ce qui simplifie grandement le code.

Quand j'ai présenté Model plus tôt, j'ai dit que CModel avait deux sous-classes, l'une est FormModel et l'autre est CActiveRecord. CActiveRecord définit des méthodes CRUD pour l'accès à la base de données, telles que

Créer un enregistrement<🎜. >

Pour insérer de nouvelles lignes dans la table de données, nous devons créer une instance de la classe AR correspondante, définir ses propriétés liées aux colonnes de la table, puis appeler la méthode save() pour terminer l'insertion

$employee=new Employee;
$employee->FirstName=&#39;James&#39;;
$employee->LastName=&#39;Shen&#39;;
...
$employee->save();
Copier après la connexion
Si la table La clé primaire s'incrémente automatiquement et qu'une fois l'insertion terminée, l'instance AR contiendra une clé primaire mise à jour. Si une colonne est définie dans la structure du tableau en utilisant une valeur statique par défaut (par exemple une chaîne, un nombre).

Lire les enregistrements

Pour lire les données dans la table de données, nous pouvons appeler l'une des méthodes de recherche de séries de la manière suivante

// Rechercher les enregistrements qui répondent aux spécifications spécifiées conditions La première ligne du résultat

$post=Post::model()->find($condition,$params);
// Rechercher la ligne avec la valeur de clé primaire spécifiée
$post = Post::model()->findByPk($postID,$condition,$params);
// Rechercher des lignes avec des valeurs d'attribut spécifiées
$post=Post::model()->findByAttributes( $attributes,$condition,$params);
// Rechercher la première ligne du résultat via l'instruction SQL spécifiée
$post=Post::model()->findBySql($sql,$params) ;Comme indiqué ci-dessus, nous appelons la méthode find via Post::model(). N'oubliez pas que la méthode statique model() est requise pour chaque classe AR. Cette méthode renvoie une instance AR dans le contexte de l'objet pour accéder aux méthodes au niveau de la classe (quelque chose comme les méthodes de classe statiques).

Si la méthode find trouve une ligne qui répond aux conditions de requête, elle renverra une instance Post dont les attributs contiennent les valeurs des colonnes correspondantes dans la ligne du tableau de données. Nous pouvons alors lire la valeur chargée comme une propriété d'objet normale, par exemple echo $post->title;.

Si rien n'est trouvé dans la base de données en utilisant les critères de requête donnés, la méthode find renverra null .

Lors de l'appel de find, nous utilisons $condition et $params pour spécifier les conditions de la requête. Ici, $condition peut être une chaîne WHERE dans l'instruction SQL et $params est un tableau de paramètres dont les valeurs doivent être liées aux espaces réservés dans $condation.

Mettre à jour l'enregistrement

Une fois que l'instance AR a rempli les valeurs des colonnes, nous pouvons les modifier et les enregistrer dans la table de données.

$post=Post::model()->findByPk(10);
$post->title=&#39;new post title&#39;;
$post->save(); // 将更改保存到数据库删除记录
Copier après la connexion
Si une instance AR est remplie d'une ligne de données, nous pouvons également supprimer cette ligne de données

$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10
$post->delete(); // 从数据表中删除此行注意,删除之后, AR 实例仍然不变,但数据表中相应的行已经没了
Copier après la connexion
Pour d'autres informations, veuillez vous référer à la documentation chinoise Yii (http ://www.yiiframework.com /doc/guide/1.1/zh_cn/database.ar), qui ne sera pas répété en détail ici.

Cet exemple affiche les résultats :

Framework de développement PHP Tutoriel Yii Framework (26) Exemple de Database-Active Record

Ce qui précède est le contenu du tutoriel du framework de développement PHP Yii Framework (26) exemple de base de données-Active Record pour. pour plus de contenu connexe, veuillez suivre le site Web PHP chinois (www.php.cn) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal