当前位置: 首页 > 工具软件 > Doctrine > 使用案例 >

Doctrine2-基础概念

都浩淼
2023-12-01

使用框架操作数据库的几个要求

1.安全,比如防止sql注入等,pdo里面prepare,execute 就可以

2.性能,数据库操作是最基本的操作,频繁使用,需要考虑到执行效率

3.ORM(object relation mapper)可以将数据映射到一个类当中,pdo也是支持的,

4.支持多种数据库(不常用)

5.能使用第三方插件,比如现在需要对五个表进行排序,可以将排序功能封装起来,每个表都可以使用去实现各自的排序功能,这时就可以从网上下载第三方代码,只需要继承该代码

即可实现排序功能。即自动实现相同功能的集合

。。。。很明显Doctirne这些条件都满足了

下面我们对Doctirne2先进行一个预览

/**
 * @Route("/")
 */
class DefaultController extends Controller
{
    /**
     * @Route("/index",name="page_index")
     * @Template()
     */
    public function indexAction()
    {
        $user = $em->getRepository('User')->findOneBy(array("id"=>1));
        $user->setName("test");

        foreach($user->getAdressBooks() as $adressBook){
            echo $adressBook->getName();
        }
        $em->presist($user);
        $em->flush();
        
    }
}

 可以看到,首先$em是传进来的一个对象,getRepositor('User')获取user信息,之后以id为1进行分类,返回一个用户数组给$user

,setName()  对用户的名字进行设置,$em->presist()将我们更改的信息交给$em托管,之后$em会自动进行处理,生成一个update语句,更改表中id为1的名字,flush() 刷新即完成更改。

中间的getAdressBooks,是假定user表和adressbooks表示一对多的关系,获取该用户对应的所有adressbooks,遍历并输出其name。、

可以看到没有像之前一样,编写复杂的sql语句进行查询更新,就完成了这些操作。在symfony网页下方也可以查看生成的sql语句

下面先了解几个基本的doctrine2概念,之后进行配置

1.Entity

类似于一个对象, 里面有各种字段以及属性,并且像mysql一样,其间有各种关系。比如刚才所用$em就是

2.Repository

一个操作集合,比如前面的getRepository()->findOneBy();将查找用户操作放在getRepository里面,选取相应的操作即可,

将数据库相关的业务逻辑操作封装起来,直接调用就行,

3.Proxy

像之前的$user,他并不是一开始就将所有SQL语句都生成出来,将所有信息都存放在$user之中,而是当你需要哪个信息的时候,

他才生成sql语句,执行查询操作,得到相应数据,相当于句动态查询的。

而当还没有查询之前的$user,就处于proxy状态,虚拟状态,用到的时候才会将其 实例化进行使用.

4.DQL语句

构建查询语句,比sql更简单一些,

$query = $em->createQuery(
   select u from database:User p where u.name=:name'        
)setParameter('name','scourgen');

上面的例子就是一个dql查询语句

下面的例子和上面的等价,不过是动态构建了一个DQL语句,更为面向对象化,可以将每一个语句都当做一个方法去替换他

$query = $em->getRepository('User')->createQueyBuilder('U')
                ->where('u.name=:name')
                ->setParmameter('name','scourgen')
                ->getQuery();

5.事件监听机制

 比如现在有一个事件会做很多事情,如果要每次都手动都添加时间戳进行记录,会很麻烦。所以DOCTRINE2为我们提供了这种自动监听机制,不需要去手动监听

 

 

 

 

 类似资料: