网上搜到的解释是方便切换数据库,以及避免写sql。这两条我不是很理解,
第一条,所谓切换数据库是指类似mysql切换到sql server这样吗,可是只要表结构一样,原生sql和查询构造器也不用改啊。
第二条,避免写冗长sql,这点查询构造器也可以啊
对于查询构造器和orm的区别,我的理解是查询构造器是一个生成sql的类,而orm是一个与表映射的类,字段映射成成员变量。我又有个问题,如果有很多表,很多字段,那么orm类岂不是很冗长。望指正我的理解哪里错误。
$user = DB::table('users')->where('name','Laravel')->first();//laravel查询构造器
$posts = Post::where('id','<',3)->orderBy('id','desc')->take(1)->get();//laravel orm
你说的很对,如果表很多,有很多字段,那么ORM类就会很冗长。
ORM的本质就是将数据库表及表与表之间的关系映射到对象及对象关系上,需要注意的是,这种映射关系虽然说是双向的,但是在Object->RDB这个方向上有一些限制,这是因为RDB对于实体的描述不如Object对于实体的描述那么丰富。
关于你提到的两个理由的说明:
方便切换数据库,个人认为虽然ORM提供了这样的特性,但是不常见,因为在真实项目中切换数据库比较少见。
避免写SQL,这个是使用ORM的重要理由,因为程序员比较偷懒,不想学SQL(即使SQL很易学),而这也是ORM最初产生的重要原因。