답변:
나는 교리와 함께 갈 것이다. 그것은 훨씬 더 활발한 프로젝트이며 심포니의 기본 ORM 인 것이 더 잘 지원됩니다 (공식적으로 ORM이 동일하다고 간주되지만).
또한 쿼리 작업 방식 (기준 대신 DQL)이 더 좋습니다.
<?php
// Propel
$c = new Criteria();
$c->add(ExamplePeer::ID, 20);
$items = ExamplePeer::doSelectJoinFoobar($c);
// Doctrine
$items = Doctrine_Query::create()
->from('Example e')
->leftJoin('e.Foobar')
->where('e.id = ?', 20)
->execute();
?>
(교리의 구현은 나에게 훨씬 직관적입니다).
또한 저는 교리에서 관계를 관리하는 방식을 선호합니다.
나는 Doctrine 문서 에서이 페이지를 읽을 가치가 있다고 생각합니다 : http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
요약하자면 : 새로운 프로젝트를 시작하거나 교리 학습과 프로 펠 학습 중 하나를 선택해야한다면 언젠가는 교리에 갈 것입니다.
Propel의 다음 릴리스에서 약간의 도움을 주었으므로 편견이 있지만 Propel이 실제로 사용할 수있는 첫 번째 ORM임을 고려한 다음 Doctrine을 만들었을 때 약간의 지연이 있었지만 다시 개발이 활발해졌습니다. Symfony 1.3 / 1.4는 대부분의 비교가 Propel 1.3에서 끝나는 Propel 1.4와 함께 제공됩니다. 또한 Propel (1.5)의 다음 릴리스에는 특히 사용자 기준 작성 (작성할 코드가 적음)이 많이 향상되었습니다.
나는 Doctrine보다 덜 복잡해 보이기 때문에 Propel을 좋아합니다. 대부분의 코드는 생성 된 소수의 클래스에 있지만 Doctrine은 많은 클래스에서 기능을 분할했습니다. 나는 사용하고있는 라이브러리 (너무 "매직"은 아님)를 잘 이해하고 싶지만, 물론 Propel에 대한 경험이 더 많기 때문에 Doctrine은 배후에서 그렇게 복잡하지 않을 수 있습니다. 어떤 사람들은 프로 펠이 더 빠르다고 말하지만 직접 확인해야하며 이것이 다른 차이점보다 큰지 고려해야합니다.
다른 프레임 워크에 Symfony 플러그인의 사용 가능성도 고려해야합니다. Propel이 여기에 이점이 있다고 생각하지만 최신 버전의 Symfony를 사용하여 나열된 플러그인 중 몇 개가 여전히 최신인지 알 수 없습니다.
그것은 개인 취향에 달려 있습니다. 나는 무엇보다도 Propel을 사용합니다. 교리에서는 그렇지 않습니다.
추진 :
$person->setName('Derek');
echo $person->getName();
교의:
$person->name = 'Derek';
echo $person->name;
내가 게터와 세터를 좋아하는 이유는 필요한 경우 모든 종류의 논리를 넣을 수 있기 때문입니다. 그러나 그것은 나의 개인적인 취향 일뿐입니다.
또한 Propel은 과거에는 느리게 움직 였지만 이제는 다시 활발하게 개발되고 있습니다. 지난 몇 달 동안 몇 가지 새로운 버전이 출시되었습니다. 가장 최신 버전의 Propel에는 Doctrine 's와 유사한 "유창한 쿼리 인터페이스"가 포함되어 있으므로 원하지 않는 경우 더 이상 기준을 사용할 필요가 없습니다.
또한 주목해야 교리 2 인 현재 개발 출시 [ED] 교리 대신 액티브 레코드의 데이터 매퍼 패턴에 의존 1. 현재 안정 버전의 기능을 거의 완전히 상이하고, 핸들 지속성에 '엔티티 관리자'를 사용 논리. 출시되면 Java의 최대 절전 모드와 유사합니다 (교리 1은 Rails의 ActiveRecord와 유사합니다).
나는 Doctrine 2의 알파 릴리스로 개발 해 왔으며 그것이 Doctrine 1보다 머리와 어깨라고 말해야합니다 (제 의견으로는 Propel을 사용한 적이 없습니다). 교리 공동체가 공개 될 때 교리 공동체가 그것을 향해 나아갈 가능성이 높습니다.
교리를 확인하도록 권장하지만, Propel과 Doctrine이 현재 사용하는 Active Record 스타일을 선호한다면 Propel을 고수하고 싶을 것입니다.
두 참조는 다소 구식이기 때문에 일부 일반 사항을 다루지 만 기본적으로 프레임 워크에 대한 경험을 평가해야합니다. 교리의 주요 단점은 해당 추진에 자동 코딩 할 수있는 IDE를 사용할 수 없다는 것입니다. 승자, 학습 곡선 추진 및 교리가 매우 다르므로 프로젝트가 복잡한 데이터 모델을 관리하여 교리를 사용하여 복잡한 문서를 관리해야하는 경우 가장 잘 문서화 된 ORM으로 빠르게 작업하고 Propel에서 더 많은 지원을 받으려면 추진하기가 더 쉽습니다. 인터넷 사용은 훨씬 성숙하고 가장 많이 사용한다고 생각합니다.
IDE의 자동 완성 기능에 더 나은 propel 1.6을 사용하는 것이 좋습니다.
나는 PHP 5 비 프레임 워크 ORM 사용자가 아니지만 다음은 좋은 비교 게시물입니다 (아직 보지 못한 경우).
http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/
http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine
이 두 가지 결론은 교리에 대해 Symfony의 새로운 ORM 세대로 선호됩니다.
몇 년 동안 두 가지를 모두 사용한 후에는 쿼리 논리를 구성하는 방법에 따라 단순히 Propel 2를 Doctrine보다 선호합니다. 교리는 그것의 깊이 수준과 일치하는 그것의 많은 측면들을 얻고 관리 할 수있는만큼 깊이 있습니다. 내가 느끼는 Propel은보다 유동적이고 객체 중심적인 방식으로 쿼리 상호 작용을 구축하고 관리합니다.
나에게 이것은 모델의 코드가 적어지고 로직 처리 방법에 대한 더 많은 구조로 이어졌습니다. 이로 인해 많은 상호 작용이 공통 기능으로 구축되었습니다. (데이터베이스로 수행 할 작업의 90 %가 어느 정도 크루 드 작업이 될 것입니다.)
결국, 둘 다 강력하고 관리 가능하며 작업을 완료 할 것입니다. 저의 개인적인 프로젝트와 관심은 Propel ORM 2와 미래의 프로젝트를 사용합니다. PHP로 작성된 경우에는 그 경로를 사용하십시오.
지난 3-4 년 동안 매일 두 가지를 모두 사용해 왔습니다.
DbFinder Plugin 사용을 제안 합니다. 이것은 실제로 두 가지를 모두 지원하는 매우 강력한 플러그인이며 매우 강력합니다. 실제로 어느 쪽보다 사용하는 것이 좋습니다.
내가 틀리지 않으면 두 ORM 모두 XML 기반 스키마를 사용하며 이러한 스키마 정의를 만드는 것은 매우 번거 롭습니다. 유창한 스타일의 PHP 기반 단순 스키마가 필요한 경우. LazyRecord https://github.com/c9s/LazyRecord를 시도하면 자동 마이그레이션 및 업그레이드 / 다운 그레이드 스크립트 생성기를 지원합니다. 또한 모든 클래스 파일은 런타임 비용없이 정적으로 생성됩니다.