좋은 PHP ORM 라이브러리?


268

PHP에 좋은 객체 관계형 매핑 라이브러리가 있습니까?

PDO / ADO를 알고 있지만 도메인 모델과 관계형 모델 간의 실제 매핑이 아니라 데이터베이스 공급 업체 간의 차이점 만 추상화하는 것 같습니다. Hibernate 가 Java 에서 수행하는 방식 과 NHibernate가 .NET 에서 수행하는 방식과 유사하게 작동하는 PHP 라이브러리를 찾고 있습니다.

답변:



103

RedBean을 사용해보십시오 .

  • 구성이 없습니다
  • 데이터베이스 없음 (모든 것을 즉시 생성)
  • 모델 없음
  • 기타

또한 모든 잠금 및 트랜잭션을 수행하고 백그라운드에서 성능을 모니터링합니다. (지옥! 심지어 가비지 컬렉션이 .... 않음) 무엇보다도 ... 당신이 코드 한 ... 라인 ... 예수 작성하지 않아도 , ORM 층을 , 엉덩이 저를 저장!


9
redbean은 내가 사용해 본 최고의 데이터베이스 추상화 계층입니다. "최고 중의 하나"가 아니라 최고입니다.
Nir Gavish

아주 좋은 발견. 나는이 ORM에 가장 감명을 받았습니다
Christopher Tarquini


1

3
+1 +1 +1 +! +! !!!! ... 예수님 나는 문서의 첫 부분을 읽었고 그것은 불길한 독재자 웃음을 만들어 주었고, 나는 그것을 이미 다운로드하고 있습니다!
KJW

45

교리 와 프로 펠의 두 가지 좋은 것이 있습니다 . 우리는 교리를 선호하며 Symfony 와 잘 작동합니다 . 그러나 주요 지원 이외의 데이터베이스 지원을 찾고 있다면 자체 코드를 작성해야합니다.


Propel은 PHP 표준으로 꽤 좋습니다. getter 및 setter 및 쿼리에 대한 매우 깨끗한 Criteria 추상화 시스템과 IDE 친화적 인 상당히 깨끗한 코드를 생성합니다.
0x6A75616E

이 질문은 너무 많이 연결되어 있기 때문에 Propel이 2020 년에 중단 된 프로젝트라는 것을 지적하고 싶었습니다. PHP7 호환성은 구현되지 않았습니다. 따라서 2020 년에 새로운 소프트웨어 프로젝트의 ORM으로 Propel을 선택하는 것은 좋은 생각이 아닙니다.
mrodo

34

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입니다.


15
$product->load('product_id=123')예제 와 같은 것을 볼 때 항상 걱정합니다 .
Znarkus

9
편집증의 경우 대체 구문은 다음과 같습니다.$product->load(array('product_id=:id',array(':id'=>123)));
bcosca

4
무 지방은되는 NoSQL MongoDB를위한으로 ORMs와 플랫 파일이
bcosca

28

나는 스스로 Pork.dbObject를 개발하고 있습니다. (간단한 PHP ORM 및 Active Record 구현) 주된 이유는 대부분의 ORM이 너무 무겁다는 것을 알기 때문입니다.

Pork.dbObejct의 주요 생각은 가볍고 설정하기 쉽다는 것입니다. XML 파일은 없으며 생성자에서 하나의 함수 호출만으로 바인딩하고 다른 dbObject와의 관계를 정의하기위한 addRelation 또는 addCustomRelation이 있습니다.

보기 : Pork.dbObject


1
나는 오늘 가벼운 PHP ORM 구현을 찾고 있었고이 게시물 덕분에 Pork.dbObject를 발견했습니다. 잘 작동합니다! +1
E Dominique

6
듀드! 이것은 꽤 흥미 롭습니다. 최신 업데이트가 '09 년 어딘가에 발생한 것으로 보입니다. 여전히 유지됩니까? 그렇지 않다면 ... 난 그냥 그것을 되 살릴 수 있습니다 :)
VladFr

22

Doctrine2 사용해보십시오 . 아마도 PHP를위한 가장 강력한 ORM 도구 일 것입니다. 나는 완전히 다른 소프트웨어이기 때문에 Doctrine 1과 별도로 언급하고 있습니다. 처음부터 다시 작성되었지만 아직 베타 단계에 있지만 지금은 사용할 수 있고 개발되었습니다.

매우 복잡한 ORM이지만 잘 설계되었습니다. 독창적 인 교리 1의 많은 마법이 사라졌습니다. 완벽한 솔루션을 제공하며 Doctrine2 위에 자체 ORM을 작성 하거나 해당 계층 중 하나만 사용할 수 있습니다 .


Doctrine2에서 생각할 수있는 유일한 문제는 PHP 5.3 이상에 의존한다는 것입니다.
jblue

8
@ jblue : 문제가 아니며 기능입니다. ;-). Doctrine과 같은 큰 라이브러리에는 네임 스페이스가 필요합니다.
Tom Pažourek

"원래 교리 1의 마술이 많이 사라졌습니다." — 이것은 어떤 점에서 긍정적입니까?
Olivier 'Ölbaum'Scherler

13

방금 Kohana로 시작했으며 Propel 과 같은 여러 구성 파일의 모든 복잡성을 호출하지 않고 Ruby on Rails에 가장 가까운 것 같습니다 .


또한 Kohana는 PHP 세계에서 RoR과 가장 유사한 프레임 워크라는 데 동의합니다. 누락 된 것은 비계 뿐이며 KO3의 CLI 지원으로 누군가 소매를 굴려서 수행하는 것입니다.
Phillip Whelan

12

콘센트 ORM을 확인하십시오 . Propel 및 Doctrine보다 간단하며 최대 절전 모드와 비슷하게 작동하며 더 많은 PHP 느낌이 있습니다.


3
나는 이것을 시도했다. 구성, 모델 및 데이터베이스 스키마의 세 곳에서 동일한 객체 속성을 지정해야했습니다. ORM IMO를 구현하는 데 많은 노력이 필요합니다.
mixdev

콘센트는 구성이 무겁습니다.
로터스 노트

나는 이것을 시도했지만 (1.0 RC1) 핵심 기능에서도 매우 버그가있었습니다. 그렇습니다. 작성할 구성이 많이 있습니다. 나는 그것을 추천하지 않습니다.
Szymon Wygnański

11

나는 Propel을 정말 좋아합니다 . 여기서 개요를 볼 수 있고 설명서 가 꽤 좋으며 PEAR 또는 SVN을 통해 얻을 수 있습니다.

작동하는 PHP5 설치 및 Phing 만 있으면 클래스 생성이 시작됩니다.


또한 Propel은 기존 데이터베이스 스키마를 '역 엔지니어링'하여 데이터베이스 스키마를 읽지 않고 PHP 객체를 생성 할 수 있습니다.
David Goodwin



6

PHP 5를위한 객체 관계형 맵퍼 인 dORM쏘십시오 . 모든 종류의 관계 (1 대 1), (1 대 다), (다 대 다) 및 데이터 유형을 지원합니다. 전혀 눈에 거슬리지 않습니다. 코드 생성이나 클래스 확장이 필요하지 않습니다. 제 생각에는 교리와 프로 펠이 포함 된 모든 ORM보다 우수합니다. 그러나 아직 베타 테스트 중이며 향후 몇 개월 내에 크게 변경 될 수 있습니다. http://www.getdorm.com

또한 학습 곡선이 매우 작습니다. 사용할 세 가지 주요 방법은 다음과 같습니다.

<?php 
$object = $dorm->getClassName('id_here');
$dorm->save($object);
$dorm->delete($object);

4

현재 phpDataMapper 에서 작업하고 있는데 , Ruby의 Datamapper 프로젝트와 같은 간단한 구문을 갖도록 설계된 ORM입니다. 아직 초기 개발 단계에 있지만 훌륭하게 작동합니다.


4

나는 Idiorm과 Paris 와 함께 훌륭한 경험을 했습니다 . 관용구는 작고 간단한 ORM 라이브러리입니다. 파리는 Idiorm을 기반으로하는 똑같이 간단한 Active Record 구현입니다. PDO가 포함 된 PHP 5.2 이상용입니다. 기존 응용 프로그램에 넣을 수있는 간단한 것을 원한다면 완벽합니다.


4

예, 한동안 작업했습니다. flourishlib는 훌륭하지만 ORM은 여전히해야 할 일이 있습니다. 추가 속성이나 외래 키가있는 조인 테이블을 사용하여 새 개체를 만드는 것은 다소 지루할 수 있습니다. 간단한 모델로 작업하는 것은 매우 쉽습니다. PHP 용 ORM 대안에 대해서는 Repose ORM 또는 Outlet을 살펴보십시오.
Michael

3

PHP 5.3 릴리스까지는 좋은 ORM을 기대하지 않습니다. PHP의 OO 제한입니다.


그렇다면 PHP 5.3은 누군가가 더 나은 ORM을 작성하는 데 어떻게 도움이됩니까? 이유가 없습니다.
Ionuț G. Stan

8
주된 이유는 늦은 정적 바인딩 ( "static"키워드)이 도입 되었기 때문입니다. blog.felho.hu/…
knoopx

2
ORM은 실제로 정적 변수가 필요하지 않으며 인스턴스 변수 만 사용하여 잘 설계 될 수 있습니다.
Tom Pažourek

사실, 늦은 정적 바인딩은 내 ORM의 각 ORM 인스턴스를 너무 낮게 얻을 수있는 이유 입니다. 정적 바인딩이 늦기 전에 대부분의 다른 바인딩만큼 낭비였습니다.
Xeoncross

3

저의 친구 키엔과 저는 PHP 5.3 이전에 작성한 ORM의 이전 버전을 개선했습니다. 우리는 본질적으로 Ruby on Rails의 Active Record 를 PHP 로 포팅했습니다 . 트랜잭션, 복합 기본 키 지원, 몇 가지 더 많은 어댑터 (현재 MySQL 및 SQLite 3 만 작동)와 같이 원하는 주요 기능이 여전히 부족합니다. 그러나 우리는이 물건을 마무리하는 데 매우 가깝습니다. PHP 5.3 에서 PHP ActiveRecord를 살펴볼 수 있습니다 .


3

PHP ADOdb를 사용해보십시오.

나는 다른 것을 사용하지 않았기 때문에 그것이 최고라고 말할 수는 없습니다. 그러나 빠르며 Memcached 및 캐싱을 지원합니다 .

또한 Zend Framework의 DB / Select 보다 빠릅니다 .


2
adodb는 Thin Model / Fat Controller 기능에 더 적합합니다. 이는 일반적으로 좋지 않습니다.
jblue

ADOdb에는 ORM이 있습니다 (단, ORM은 아닙니다). 그것은 일반적으로 정말 훌륭한 솔루션입니다. Zend가 DB에 대해하는 것보다 훨씬 잘 작동합니다 (ADOdb보다 느리며 Zend DB는 JOIN 지원이 제한적 임). 많은 다른 DB 백엔드 및 매우 쉬운 memcache 통합으로 확장 가능한 캐싱 디자인이 뛰어납니다. 나는 그것이 "Thin Model / Fat Controller"구현에 적합하다고 말하는 것이 전혀 정확하지 않다고 생각합니다 (그렇게 할 수는 있지만 ADOdb의 디자인은 어떤 식 으로든 선호하지 않습니다).
Iain Collins

3

KohanaLEAP ORM을 살펴보십시오 . DB2 , Drizzle , Firebird , MariaDB , SQL Server, MySQL , Oracle, PostgreSQLSQLite를 포함하여 많은 데이터베이스에서 작동합니다 . 간단한 자동로드 기능을 사용하면 거의 모든 PHP 프레임 워크에서 작동 할 수 있습니다. 소스 코드는 https://github.com/spadefoot/kohana-orm-leap의 GitHub있습니다 . LEAP의 자습서를 온라인으로 확인할 수 있습니다 .

ORM 라이브러리는 정수가 아닌 기본 키 및 복합 키와 함께 작동합니다. 연결은 데이터베이스 연결 풀을 통해 관리되며 원시 SQL 쿼리와 함께 작동합니다. ORM에는 SQL 문 작성을 매우 간단하게 만드는 쿼리 작성기도 있습니다.


2

모험심이 있다면 Repose 를 확인할 수 있습니다 . Outlet 과 마찬가지로 Hibernate를 모델로 합니다.

아직 개발 초기 단계이지만 도메인 모델에 대한 유일한 제한 사항은 클래스가 final로 표시되지 않고 속성이 private으로 표시되지 않는다는 것입니다. PHP> = 5.3의 땅에 들어가면 개인 속성에 대한 지원도 구현하려고 시도 할 것입니다.


2

구체적으로 Active Record가 아닌 Data Mapper 패러다임을 구현하는 ORM을 찾고 있다면 GacelaPHP를 살펴 보는 것이 좋습니다 .

가 셀라 특징 :

  • 데이터 매퍼
  • 외래 키 매핑
  • 연관 매핑
  • 종속 매핑
  • 콘크리트 테이블 상속
  • 쿼리 객체
  • 메타 데이터 매핑
  • 게으르고 열망하는 로딩
  • 완벽한 Memcached 지원

다른 ORM 솔루션은 원격으로 복잡한 것을 개발할 때 너무 부풀어 지거나 부담스러운 한계가 있습니다. Gacela 는 데이터베이스 및 Memcached와의 모든 상호 작용에 PDO 를 사용하여 부풀림을 최소화하면서 데이터 매퍼 패턴을 구현함으로써 활성 레코드 접근 방식의 한계를 해결합니다 .


2

MicroMVC에는 8KB 데이터베이스 클래스 에만 의존 하는 13KB ORM 이 있습니다. 또한 모든 결과를 ORM 객체로 반환하고 최신 정적 바인딩을 사용하여 현재 객체의 테이블 및 메타 데이터에 대한 정보를 각 객체에 포함하지 않습니다. 결과적으로 가장 저렴한 ORM 오버 헤드가 발생합니다.

MySQL , PostgreSQLSQLite 와 함께 작동합니다 .


2

브라질 ORM : http://www.hufersil.com.br/lumine . PHP 5.2 이상에서 작동합니다. 내 생각에, 그것은 이해하기 쉬운 문서와 많은 다운로드 예제가 있기 때문에 포르투갈어와 브라질 사람들에게 가장 좋은 선택입니다.


2

Agile Toolkit 에는 고유 한 ORM / ActiveRecord 및 동적 SQL 구현이 있습니다.

소개 : http://agiletoolkit.org/intro/1

구문 (활성 레코드) :

$emp=$this->add('Model_Employee');
$emp['name']='John';
$emp['salary']=500;
$emp->save();

구문 (동적 SQL) :

$result = $emp->count()->where('salary','>',400)->getOne();

동적 SQL 및 Active Record / ORM을 직접 사용할 수 있지만 Agile Toolkit은 이들을 사용자 인터페이스 및 jQuery UI 와 통합합니다 . 이것은 JSF 와 비슷 하지만 순수한 PHP로 작성되었습니다.

$this->add('CRUD')->setModel('Employee');

직원 모델과 함께 AJAXified CRUD 가 표시됩니다 .


2

노름

include "NotORM.php";
 $pdo = new PDO("mysql:dbname=software");
 $db = new NotORM($pdo);
 $applications = $db->application()
->select("id, title")
->where("web LIKE ?", "http://%")
->order("title")
->limit(10)
;
foreach ($applications as $id => $application) {
echo "$application[title]\n";
}

2

PHP ORM Faces PDO 확장 용. PHP Faces Framework를 참조하십시오 .

$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();

1. 사이트는 터키어입니다. 2. 코드는 Doctrine과 같이 사용할 코드와 다르지 않습니다.
Pellmeister


1

우리가 사용하는 또 다른 훌륭한 오픈 소스 PHP ORM은 PHPSmartDb 입니다. 안정적이고 코드를보다 안전하고 깨끗하게 만듭니다. 그 안의 데이터베이스 기능은 PHP 5.3에서 가장 손쉬운 기능입니다.


1

교리는 아마도 가장 좋은 방법 일 것입니다. Doctrine 이전에는 DB_DataObject 가 기본적으로 오픈 소스 된 유일한 다른 유틸리티였습니다.


1

Hibernate 와 같은 ORM을 찾고 있다면 PMO를 살펴 봐야한다 .

SOA 아키텍처 에 쉽게 통합 될 수 있습니다 (개발할 웹 서비스 클래스 만 있음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.