PHP ORM _ Управление соединениями

#php #orm

#php #orm

Вопрос:

Какой фреймворк PHP ORM является хорошим и легковесным, также имеющим пул соединений и управление соединениями, как фреймворк hibernate

Комментарии:

1. Вам нужен облегченный ORM, но вы сравниваете его по функциональным возможностям с Hibernate, который далеко не облегченный… Вы уверены, чего хотите?

2. Привет, Яни Хартикайнен, Спасибо за ваш быстрый ответ, я ищу фреймворк PHP ORM, в котором есть пул соединений и пример управления соединениями, такой как hibernate… Пожалуйста, дайте свой совет.. Спасибо, рам

Ответ №1:

Из-за того, как PHP разработан для запуска, вы на самом деле не найдете ничего, эквивалентного объединению в пул соединений. Фактически, самое близкое, что вы можете получить, — это постоянные соединения, в которых есть свои подводные камни.

Лично мне нравится Propel, хотя называть его легковесным — это своего рода субъективно. Я не совсем уверен, что означает «управление соединениями», но propel предназначен для обработки нескольких подключений к базе данных, а также маршрутизации master / slave на основе запроса. Вы можете увеличить скорость в ORM с помощью определенных оптимизаций (APC, Memcached и т.д.). Такие вещи, как гидратация объектов, также помогают ускорить работу вашего приложения.

Проверьте это. Это не для всех.

(Для полноты описания другой популярный ORM для PHP называется Doctrine. Лично мне это не нравится.)

Редактировать

Одной из сильных сторон propel (для меня) была его интеграция с phing. Я думаю, что, исходя из среды jboss, вы обнаружите, что в ней отсутствуют такие вещи, как процесс развертывания кода. Для меня phing решает многие из этих проблем. Пока у меня должен быть установлен phing для работы propel, я могу также использовать его для развертывания во всем приложении.

Phing может запускать tar-шары, zip-файлы, pear-пакеты или даже RPM-файлы, если вы чувствуете себя смелым.

Комментарии:

1. Привет, Victrolla, да .. Propel — действительно хорошая и простая реализация… также будет рассмотрена доктрина .. Спасибо за ваш вклад

Ответ №2:

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

http://dbphp.net/connect-using-many-links/

Недостаток фреймворка в том, что он кажется новорожденным, а документация по репозиторию github обновляется 2-3 раза в неделю, но я уже использую его в своей платформе электронной коммерции и могу сказать, что я полностью удовлетворен.

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

 $database->link (new dblink ('my_mysql_link_name', 'mysql:host=127.0.0.1', 'root', '1234'));
  

И если это не ссылка по умолчанию (первая ссылка), то вы должны указать ее своему классу (если у вас есть класс, таблица которого находится в базе данных ссылок не по умолчанию):

 /**
* link my_mysql_link_name
*/
class user
{

}
  

И после того, как вы добавите этот обработчик таблицы класса в базу данных:

 $database->add ('user);
  

Затем все запросы к этому обработчику таблицы класса будут выполняться по ссылке, указанной пользовательским классом:

 $database->save (new user());
  

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

Я также заметил одну интересную вещь, что если у меня настроена связь между свойствами класса, чем db.php извлекает связанные строки (один к одному) с объединением по левому краю в одном запросе, если таблицы связанных полей находятся по одной ссылке подключения, в противном случае будут использоваться отдельные запросы для извлечения связанных строк для объектов (также вы можете указать ключевое слово lazy в комментарии к документу о свойствах, чтобы избежать загрузки связанных объектов).

О, и также вы всегда можете получить доступ к своим соединениям следующим образом: $database->link('name_of_link') или $database->link() для ссылки на соединение по умолчанию, и вы можете просто добавить свой собственный класс в качестве ссылки на базу данных и переопределить все методы связи, как описано здесь:

http://dbphp.net/connect-using-custom-link/

И еще, о, что мне больше всего нравится в db.php это создает или синхронизирует базы данных и структуры таблиц автоматически по всем ссылкам, просто вызывая $database->update() . <3