PHP ORMs: доктрина по сравнению с продвигает

Я запускаю новый проект с симфонии, которая с готовностью интегрируется с Доктриной, и Продвиньте, но я, конечно, должен сделать выбор.... Я задавался вопросом, есть ли у более опытных людей там общие профессионалы и/или недостатки для движения с любым из этих двух?

Большое спасибо.

Править: Спасибо за все ответы, полезный материал. Нет никакого действительно корректного ответа на этот вопрос, таким образом, я просто отмечу, как утверждено тот, который получил самые популярные-голоса.

126
задан Mohammad Ali Akbari 16 July 2012 в 11:51
поделиться

7 ответов

Я бы пошел с доктриной. Мне кажется, что это гораздо более активным проектом и является ORM по умолчанию для Symfony, тем лучше поддерживаться (хотя официально Официально ОРМ считаются равными).

Кроме того, я лучше люблю, как вы работаете с запросами (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();
?>

(реализация доктрины гораздо интуитивно понятна для меня).

Кроме того, я действительно предпочитаю, как вы управляете отношениями в доктрине.

Я думаю, что эта страница от доктриной документации стоит читать: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-xplied

для суммирования : Если бы я начал новый проект или должен был выбрать между учебной доктриной и провизией, я бы пошел на доктрину в любой день.

76
ответ дан 24 November 2019 в 00:54
поделиться

Я предвзятый, так как я помогаю немного по следующему выпуску продвижения, но вы должны учитывать, что PROPEL действительно была первой доступой ORM, а затем отстала немного, когда у доктрины было создано, но теперь имеет активное развитие снова. Symfony 1.3 / 1.4 поставляется с Propel 1.4, где большинство сравнений останавливаются на прогрессе 1.3. Кроме того, следующий выпуск промель (1.5) будет содержать много улучшений, особенно в создании ваших критериев (в результате чего меньше кода для написания).

Мне нравится продвижение, потому что это кажется менее сложным, чем учение: Большинство кода в немногих сгенерированных классах, тогда как доктрина рассталась на функциональность в большом количестве классов. Мне нравится хорошо иметь хорошее понимание библиотек, которые я использую (не слишком много «магии»), но, конечно, у меня есть больше опыта с промельтой, поэтому, возможно, доктрина не так усложняется за кулисами. Некоторые говорят, что продвижение быстрее, но вы должны проверить это для себя, и рассмотреть вопрос о том, перевешивает ли это другие различия.

Может быть, вы также должны рассмотреть доступность плагинов Symfony для различных структур. Я считаю, что Propel есть преимущество здесь, но я не знаю, сколько из перечисленных плагинов все еще актуальны с последней версией Symfony.

40
ответ дан 24 November 2019 в 00:54
поделиться

Две ссылки несколько устарели, поэтому вы тем не менее, охватываете некоторые общие общества, в основном вам придется оценить свой опыт в рамках как таковой, основной недостаток доктрины - это неспособность иметь IDE Это позволяет вам автоматически код в том, что PROPEL является победителем, кривые обучения и доктрина очень разные, проще предпивать, если ваш проект должен будет управлять сложной моделью данных, использует доктрину, если вы хотите быстро работать с ORM Что лучше всего задокументировано и найти больше поддержки в интернет-использовании Propel, гораздо более зрело, и я считаю, что наиболее использовано.

http://propel.posterous.com/propel-141-is-out

5
ответ дан 24 November 2019 в 00:54
поделиться

Это сводится к персональному предпочтению. Я использую, Продвигают, потому что (среди прочего) мне нравится то, что все имеет его собственный конкретный метод считывания и метод установщика. В Доктрине, дело обстоит не так.

Продвиньте:

$person->setName('Derek');
echo $person->getName();

Доктрина:

$person->name = 'Derek';
echo $person->name;

причина мне нравится иметь методы считывания, и методы set то, что я могу поместить все виды логики в них, если я должен. Но это - просто мое персональное предпочтение.

я должен также добавить, что, хотя Продвигают, было медленно в прошлом, это теперь находится в процессе активного развития снова. Это выпустило несколько новых версий за прошлые несколько месяцев. Новая версия Продвигает, включает "быстрый интерфейс запросов", подобный Доктрине , таким образом, вы не должны больше использовать Критерии, если вы не хотите.

23
ответ дан 24 November 2019 в 00:54
поделиться
- 3677842-

Я не пользователь PHP 5 нетрадей ORM, но вот несколько хороших постов сравнения (если вы еще не видели их):

http: // codeutopia .net / blog / 2009/05/16 / 16/16 / 16/123 /

http://trac.symfony-project.org/wiki/comparingPropelanddoCtrine

Оба конверсии фаворита в отношении доктрины в качестве более нового Генерация ORM для Symfony.

2
ответ дан 24 November 2019 в 00:54
поделиться

Вы можете добавить LINQ в класс SQL напрямую в проект WCF и устанавливать режим сериализации на LINQ в класс SQL в однонаправленную. Если вы это сделаете, классы будут отображаться по службе WCF.

-121--3960538-

Следует отметить Учение 2 - это , в настоящее время в разработке , выпущенных и функции практически полностью отличаются от текущего Стабильная версия доктрины 1. Она зависит от шаблона Mapber данных вместо активной записи и использует «менеджер Entity» для обработки логики настойчивости. Когда выпустил, он будет ближе к ближему сходству с гибернатом Java (доктрина 1 больше похоже на Rails 'Activerecord).

Я разрабатываю с альфа-освобождением доктрины 2, и должен сказать, что это главы и плечи над доктриной 1 (просто мое мнение, и я никогда не использовал провизин). Шансы хороши, что сообщество доктрины движется к нему, когда он выпущен.

Я бы побудил вас проверить доктрину, но если вы предпочитаете стиль активного записи, который сейчас использует промель и доктрина, вы можете просто придерживаться промирина.

20
ответ дан 24 November 2019 в 00:54
поделиться

Я бы предложил использовать подключаемый модуль DbFinder . На самом деле это очень мощный плагин, который поддерживает оба, и довольно мощный. На самом деле мне нравится использовать его больше, чем что-либо другое.

1
ответ дан 24 November 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: