PHP에 좋은 객체 관계형 매핑 라이브러리가 있습니까?
PDO / ADO를 알고 있지만 도메인 모델과 관계형 모델 간의 실제 매핑이 아니라 데이터베이스 공급 업체 간의 차이점 만 추상화하는 것 같습니다. Hibernate 가 Java 에서 수행하는 방식 과 NHibernate가 .NET 에서 수행하는 방식과 유사하게 작동하는 PHP 라이브러리를 찾고 있습니다.
답변
교리를 보라 .
Doctrine 1.2 는 Active Record를 구현합니다. Doctrine 2+ 는 DataMapper ORM입니다.
또한 Xyster를 확인하십시오 . 데이터 매퍼 패턴을 기반으로합니다.
또한 DataMapper와 Active Record를 살펴보십시오 .
답변
RedBean을 사용해보십시오 .
- 구성이 없습니다
- 데이터베이스 없음 (모든 것을 즉시 생성)
- 모델 없음
- 기타
또한 모든 잠금 및 트랜잭션을 수행하고 백그라운드에서 성능을 모니터링합니다. (지옥! 심지어 가비지 컬렉션이 …. 않음) 무엇보다도 … 당신이 코드 한 … 라인 … 예수 작성하지 않아도 이 , ORM 층을 , 엉덩이 저를 저장!
답변
교리 와 프로 펠의 두 가지 좋은 것이 있습니다 . 우리는 교리를 선호하며 Symfony 와 잘 작동합니다 . 그러나 주요 지원 이외의 데이터베이스 지원을 찾고 있다면 자체 코드를 작성해야합니다.
답변
Axon ORM은 Fat-Free Framework 의 일부입니다 . 즉석 매퍼가 특징입니다. 코드 생성기가 없습니다. 바보 같은 XML / YAML 구성 파일이 없습니다. 백엔드에서 직접 데이터베이스 스키마를 읽으므로 대부분의 CRUD 작업에서는 기본 모델을 확장 할 필요조차 없습니다. MySQL , SQLite , SQL Server / Sybase, Oracle, PostgreSQL 등 모든 주요 PDO 지원 데이터베이스 엔진 과 작동합니다 .
/* SQL */
CREATE TABLE products (
product_id INTEGER,
description VARCHAR(128),
PRIMARY KEY (product_id)
);
/* PHP */
// Create
$product=new Axon('products'); // Automatically reads the above schema
$product->product_id=123;
$product->description='Sofa bed';
$product->save(); // ORM knows it's a new record
// Retrieve
$product->load('product_id=123');
echo $product->description;
// Update
$product->description='A better sofa bed';
$product->save(); // ORM knows it's an existing record
// Delete
$product->erase();
무엇보다도 플러그인 및 수반되는 SQL 데이터 액세스 계층은 프레임 워크만큼 가볍습니다 (14KB (Axon) + 6KB (SQLdb)). 무 지방은 55KB입니다.
답변
나는 스스로 Pork.dbObject를 개발하고 있습니다. (간단한 PHP ORM 및 Active Record 구현) 주된 이유는 대부분의 ORM이 너무 무겁다는 것을 알기 때문입니다.
Pork.dbObejct의 주요 생각은 가볍고 설정하기 쉽다는 것입니다. XML 파일은 없으며 생성자에서 하나의 함수 호출만으로 바인딩하고 다른 dbObject와의 관계를 정의하기위한 addRelation 또는 addCustomRelation이 있습니다.
보기 : Pork.dbObject
답변
Doctrine2 사용해보십시오 . 아마도 PHP를위한 가장 강력한 ORM 도구 일 것입니다. 나는 완전히 다른 소프트웨어이기 때문에 Doctrine 1과 별도로 언급하고 있습니다. 처음부터 다시 작성되었지만 아직 베타 단계에 있지만 지금은 사용할 수 있고 개발되었습니다.
매우 복잡한 ORM이지만 잘 설계되었습니다. 독창적 인 교리 1의 많은 마법이 사라졌습니다. 완벽한 솔루션을 제공하며 Doctrine2 위에 자체 ORM을 작성 하거나 해당 계층 중 하나만 사용할 수 있습니다 .
