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.*', ),
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'; } }
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, ));}
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 '----------------------';} ?>
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='James'; $employee->LastName='Shen'; ... $employee->save();
$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).
$post=Post::model()->findByPk(10); $post->title='new post title'; $post->save(); // 将更改保存到数据库删除记录
$post=Post::model()->findByPk(10); // 假设有一个帖子,其 ID 为 10 $post->delete(); // 从数据表中删除此行注意,删除之后, AR 实例仍然不变,但数据表中相应的行已经没了