我正在构建一个简单的PHP库。
一个功能是允许这样做:
$myCatalog = new Catalog();
// add books
for ($i=0; $i<99; $i++) {
$myBook = new Book();
$myBook->title = 'Book ' . $i;
$myBook->parentId = $myCatalog->id;
$myBook->create();
}
// add other product
for ($i=0; $i<99; $i++) {
$myProduct = new Product();
$myProduct->name = 'Product ' . $i;
$myProduct->parentId = $myCatalog->id;
$myProduct->create();
}
$catalog_books = $myCatalog->getChildren('Book');
$catalog_products = $myCatalog->getChildren('Product');
我想这不是真正的ORM功能,是吗?
答案 0 :(得分:0)
我说它看起来像Active Record Pattern
通常,活动记录实体实施负责维护自己(Create()
,Update()
,Delete()
)
ORM(对象关系映射)通常是将数据库模式直接映射到POCO(普通旧代码对象)的时候。然后,中介(通常是存储库)负责维护您的实体。
大多数ORM系统采用这样的方式:
$user = new User();
$user->Username = "Aren";
$user->Email = "aren@somewhere.com";
$em = new EntityManager;
$em->persist($user);
$em->flush();
-----让我重新讲述-----
ORM ,对象关系映射通常通过定义表和对象上的字段之间的关联来运行。有很多种方法,Doctrine ORM支持3种方法:代码注释,XML和YAML。
示例学说映射:
<?php
/** @Entity */
class MyPersistentClass
{
/** @Column(type="integer") */
private $id;
/** @Column(length=50) */
private $name; // type defaults to string
//...
}
然后,通过实体管理器/存储库管理实体上的所有创建/读取/更新/销毁(CRUD)操作。 SQL是为您生成的,您不负责提供实体从数据库中取出或保留的方式。 (虽然有些ORM会给你灵活性来扩展它)。
ARP , Active Record Pattern 是每个对象代表数据库中一行的位置。在许多常见的ARP实现中,大多数DB操作都暴露在对象上(尽管不是必需的)。
$user = new User();
$user->loadByID(42);
ORM Systems有时会使用ARP来帮助实体管理。
最终,如果没有某种元数据将对象绑定到它的行,我不会说它是一个ORM。
我猜它归结为:
.save()
.delete()
等。它可以归类为ARP(活动记录)图案)答案 1 :(得分:0)
术语ORM(对象关系映射)表明存在涉及的数据库(或其他对象/数据空间),并且数据库中存在名为Catalog,Book,Product等的对象(例如表)。这些对象之间存在关系 - 目录有很多书籍,目录有很多产品等等。而且你已经创建了这些PHP对象来模拟应用程序中的数据库对象。但如果情况并非如此 - 也就是说,如果您没有将数据库对象和关系映射到PHP对象,那么这只是一个很好的旧的面向对象编程的示例。