Maison  >  Article  >  cadre php  >  La différence entre dao et ar dans yii2

La différence entre dao et ar dans yii2

(*-*)浩
(*-*)浩original
2019-11-05 13:20:412549parcourir

Active Record (AR) est une technologie populaire de cartographie objet-relationnelle (ORM). 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.

La différence entre dao et ar dans yii2

Ainsi, nous pouvons accéder aux données de manière plus orientée objet. $c = new CDbCriteria(); est une façon d'écrire ActiveRecord, qui rend ActiveRecord plus flexible, tandis que l'assemblage de SQL est le plus courant. Examinons deux exemples ci-dessous. (Apprentissage recommandé : tutoriel yii)

Remarque : AR n'est pas destiné à résoudre toutes les tâches liées aux bases de données. Ses meilleures applications consistent à modéliser des tables de données dans des structures PHP et à exécuter des requêtes qui ne contiennent pas d'instructions SQL complexes. Pour les scénarios de requêtes complexes, Yii DAO doit être utilisé.

$criteria = new CDbCriteria;       
//函数方式 
$criteria->addCondition("id=1"); //查询条件,即where id = 1   
$criteria->addInCondition('id', array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);   
$criteria->addNotInCondition('id', array(1,2,3,4,5));//与上面正好相法,是NOT IN   
$criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND   
$criteria->addSearchCondition('name', '分类');//搜索条件,其实代表了。。where name like '%分类%'   
$criteria->addBetweenCondition('id', 1, 4);//between 1 and 4    
     
$criteria->compare('id', 1);    //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,   
                                //即如果第二个参数是数组就会调用addInCondition   
$criteria->addCondition("id = :id");   
$criteria->params[':id']=1;   
      
//属性方式   
$criteria->select = 'id,parentid,name'; //代表了要查询的字段,默认select='*';   
$criteria->join = 'xxx'; //连接表   
$criteria->with = 'xxx'; //调用relations    
$criteria->limit = 10;    //取1条数据,如果小于0,则不作处理   
$criteria->offset = 1;   //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10   
$criteria->order = 'xxx DESC,XXX ASC' ;//排序条件   
$criteria->group = 'group 条件';   
$criteria->having = 'having 条件 ';   
$criteria->distinct = FALSE; //是否唯一查询

Yii Data Access Object (DAO) est construit sur l'extension PHP Data Object (PDO), permettant d'accéder à différents systèmes de gestion de bases de données (SGBD) dans une seule interface unifiée. Les applications développées à l'aide du DAO de Yii peuvent facilement passer à différents systèmes de gestion de bases de données sans modifier le code d'accès aux données. Ce qui suit est un exemple de DAO :

Exemple de code

/**
     * 关于DAO的例子
     * 获取所有用户名
     */
    public function getUsernames ()
    {
        $sqlStatement = ' SELECT `username` FROM `testdrive`.`tbl_user` ';
        $this->command = $this->connection->createCommand($sqlStatement);
        return $this->command->queryAll();
    }
    /**
     *
     * 添加一个用户
     */
    public function addUser ()
    {
        $sqlStatement = " INSERT INTO `tbl_user` (`username`, `password`, `email`) VALUES ('test', 'test', 'test@test.com') ";
        $this->command = $this->connection->createCommand($sqlStatement);
        return $this->command->execute();
    }

Quelques points à noter :

1 , la différence avec la méthode DAO est que chaque élément du tableau de la méthode DAO est toujours un tableau. Avec la méthode CDbCriteria, les éléments du tableau sont des objets.

2. Même si cette fonction est très puissante, certaines exigences ne peuvent toujours pas être remplies. À l'heure actuelle, les instructions SQL sont toujours nécessaires. Par exemple, sélectionnez le montant moyen (num) parmi ****.

3. Imprimez les résultats après l'exécution et vous pourrez en savoir plus sur la façon dont Yii implémente cela

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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