mirror of
https://github.com/php/doc-ru.git
synced 2026-03-24 07:42:22 +01:00
178 lines
7.5 KiB
XML
178 lines
7.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: 3e871fe7eab38f9b0398569c57a1dd0c21e69652 Maintainer: rjhdby Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<section xml:id="mongodb.tutorial.library" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>Работа библиотеки PHP с драйвером MongoDB (PHPLIB)</title>
|
||
|
||
<para>
|
||
После первоначальной настройки модуля продолжится объяснение того, как начать
|
||
работу с соответствующей пользовательской библиотекой для написания первого проекта.
|
||
</para>
|
||
|
||
<section>
|
||
<title>Установка библиотеки PHP через Composer</title>
|
||
|
||
<para>
|
||
Последнее, что необходимо установить перед тем,
|
||
как начать писать приложение, — это библиотека PHP.
|
||
</para>
|
||
|
||
<para>
|
||
Библиотеку будем устанавливать через пакетный менеджер
|
||
<link xlink:href="&url.mongodb.composer;">Composer</link>.
|
||
Инструкции по установке Composer на разные платформы опубликованы на его сайте.
|
||
</para>
|
||
|
||
<para>
|
||
Библиотеку устанавливают так:
|
||
<programlisting role="shell">
|
||
<![CDATA[
|
||
$ composer require mongodb/mongodb
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
|
||
<para>
|
||
Будет выведено что-то вроде:
|
||
|
||
<programlisting role="text">
|
||
<![CDATA[
|
||
./composer.json has been created
|
||
Loading composer repositories with package information
|
||
Updating dependencies (including require-dev)
|
||
- Installing mongodb/mongodb (1.0.0)
|
||
Downloading: 100%
|
||
|
||
Writing lock file
|
||
Generating autoload files
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
|
||
<para>
|
||
Composer создаст несколько файлов: <code>composer.json</code>,
|
||
<code>composer.lock</code> и директорию <code>vendor</code>,
|
||
содержащую саму библиотеку и другие зависимости, которые потребуются
|
||
в проекте.
|
||
</para>
|
||
</section>
|
||
|
||
<section>
|
||
<title>Работа с библиотекой PHP</title>
|
||
|
||
<para>
|
||
Кроме управления зависимостями, Composer также содержит
|
||
автозагрузчик классов для этих зависимостей. Необходимо убедиться,
|
||
что этот автозагрузчик включён в начало скрипта
|
||
или в код начальной загрузки приложения:
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// Этот путь должен указывать на автозагрузчик Composer
|
||
require 'vendor/autoload.php';
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
|
||
<para>
|
||
После этого можно использовать библиотеку
|
||
как описано <link xlink:href="&url.mongodb.library.docs;">в документации</link>.
|
||
</para>
|
||
|
||
<para>
|
||
Если ранее приходилось работать с драйвером MongoDB в других языках, API библиотеки
|
||
будет выглядеть знакомым. Он содержит
|
||
класс <link xlink:href="&url.mongodb.library.apidocs;/class/MongoDBClient/">Client</link>
|
||
для соединения с MongoDB,
|
||
класс <link xlink:href="&url.mongodb.library.apidocs;/class/MongoDBDatabase/">Database</link>
|
||
для операций уровня базы данных (например, команды, управление коллекциями)
|
||
и класс
|
||
<link xlink:href="&url.mongodb.library.apidocs;/class/MongoDBCollection">Collection</link>
|
||
для операций уровня коллекций (например, операций
|
||
<link xlink:href="&url.mongodb.wiki.crud;">CRUD</link>, управление индексами).
|
||
</para>
|
||
|
||
<para>
|
||
Например, вот как вставить документ в коллекцию
|
||
<emphasis>beers</emphasis> базы данных <emphasis>demo</emphasis>:
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
require 'vendor/autoload.php'; // подключаем автозагрузчик классов Composer
|
||
|
||
$client = new MongoDB\Client("mongodb://localhost:27017");
|
||
$collection = $client->demo->beers;
|
||
|
||
$result = $collection->insertOne( [ 'name' => 'Hinterland', 'brewery' => 'BrewDog' ] );
|
||
|
||
echo "Идентификатор вставленного документа '{$result->getInsertedId()}'";
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
|
||
<para>
|
||
Поскольку вставленный документ не содержал поля <code>_id</code>,
|
||
модуль сгенерирует объект <classname>MongoDB\BSON\ObjectId</classname>,
|
||
чтобы сервера использовал его как <code>_id</code>. Это значение также становится доступно
|
||
вызывающей стороне через результирующий объект, который возвращается методом <code>insertOne</code>.
|
||
</para>
|
||
|
||
<para>
|
||
После вставки можно запросить только что вставленные данные.
|
||
Для этого вызывают метод <code>find</code>, который возвращает итерируемый
|
||
курсор:
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
|
||
require 'vendor/autoload.php'; // Подключаем автозагрузчик классов Composer
|
||
|
||
$client = new MongoDB\Client("mongodb://localhost:27017");
|
||
$collection = $client->demo->beers;
|
||
|
||
$result = $collection->find(['name' => 'Hinterland', 'brewery' => 'BrewDog']);
|
||
|
||
foreach ($result as $entry) {
|
||
echo $entry['_id'], ': ', $entry['name'], "\n";
|
||
}
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</para>
|
||
|
||
<para>
|
||
Хотя примеры не всегда добавляют очевидности, но BSON-документы и BSON-массивы по умолчанию
|
||
не сериализуются как специальные классы в библиотеке. Эти классы
|
||
расширяют класс <classname>ArrayObject</classname> для удобства и реализуют
|
||
интерфейсы модуля <interfacename>MongoDB\BSON\Serializable</interfacename>
|
||
и <interfacename>MongoDB\BSON\Unserializable</interfacename>, чтобы гарантировать,
|
||
что значения сохраняют тип при сериализации обратно в BSON. Это
|
||
помогает избежать предостережения в устаревшем модуле <code>mongo</code>, в котором массивы
|
||
могли превращаться в документы и наоборот. Дополнительную информацию
|
||
о преобразовании значений между PHP и BSON даёт спецификация
|
||
<xref linkend="mongodb.persistence"/>.
|
||
</para>
|
||
</section>
|
||
</section><!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|