Files
php-doc-ru/reference/mongo/mongodbref.xml
Andrey Gromov b1a426f5b3 translated by Максим Барулин
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@340123 c90b9560-bf6c-de11-be94-00142212c4b1
2016-09-23 08:00:23 +00:00

167 lines
6.3 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: c613a7e2f1f795b1fb741e4bda1a40e441c49f7a Maintainer: rjhdby Status: ready -->
<!-- Reviewed: yes -->
<phpdoc:classref xml:id="class.mongodbref" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Класс MongoDBRef</title>
<titleabbrev>MongoDBRef</titleabbrev>
<partintro>
<warning>
&mongo.noalternative.class.note;
<para>
Концепция ссылок на базу данных, а следовательно и данный класс,
являются устаревшими.
</para>
</warning>
<!-- {{{ MongoGridfsCursor intro -->
<section xml:id="mongodbref.intro">
&reftitle.intro;
<para>
Этот класс может быть использован для создания простых связей между
объектами разных коллекций.
</para>
<para>
<emphasis>Основание</emphasis>: Предположим, что нам нужно сослаться
на документ из другой коллекции. Самый простой способ - создать специальное
поле в текущем документе. Например, если у нас есть коллекции людей и
адресов, мы можем создать связь между документом адреса и документом человека:
<example>
<title>Связывание документов</title>
<programlisting role="php">
<![CDATA[
<?php
$people = $db->people;
$addresses = $db->addresses;
$myAddress = array("line 1" => "123 Main Street",
"line 2" => null,
"city" => "Springfield",
"state" => "Vermont",
"country" => "USA");
// сохраняем адрес
$addresses->insert($myAddress);
// сохраняем человека со ссылкой на адрес
$me = array("name" => "Fred", "address" => $myAddress['_id']);
$people->insert($me);
?>
]]>
</programlisting>
</example>
</para>
<para>
Позже мы можем найти адрес человека с помощью запроса в
коллекцию адресов с использованием <classname>MongoId</classname>
который мы сохранили в коллекции людей.
</para>
<para>
Теперь предположим, что мы имеем более общий случай, когда не известно
какая коллекция (или даже база данных) содержит указанный документ.
<classname>MongoDBRef</classname> является хорошим выбором в такой
ситуации, так как это общий формат, который понимают все драйверы и
базы данных.
</para>
<para>
Если каждый человек имеет список понравившихся вещей и все они находятся
в разных коллекциях, таких как: "hobbies", "sports", "books", и т.д.,
мы можем использовать <classname>MongoDBRef</classname> для отслеживания
того, что и из какой коллекции "лайкнул" человек:
<example>
<title>Создание MongoDBRef связи</title>
<programlisting role="php">
<![CDATA[
<?php
$people = $db->selectCollection("people");
// модель поезда в коллекции "hobbies"
$trainRef = MongoDBRef::create("hobbies", $modelTrains['_id']);
// футбол в "sports" коллекции
$soccerRef = MongoDBRef::create("sports", $soccer['_id']);
//теперь мы знаем, какие коллекции элементов в массиве "likes" придут, когда
// мы будем извлекать этот документ
$people->insert(array("name" => "Fred", "likes" => array($trainRef, $soccerRef)));
?>
]]>
</programlisting>
</example>
</para>
<para>
Ссылки в базе данных можно рассматривать как гиперссылки: он
предоставляет уникальный адрес другого документа, но не загружает
его автоматически и не переходит по этим ссылкам.
</para>
<para>
Ссылки в базе данных это обычный ассоциативный массив, не экземплр
<classname>MongoDBRef</classname>, поэтому этот класс немного оличается
от других классов типов данных. Этот класс содержит только ститические
методы для манипуляции ссылками базы данных.
</para>
</section>
<!-- }}} -->
<section xml:id="mongodbref.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis>
<ooclass><classname>MongoDBRef</classname></ooclass>
<!-- {{{ Class synopsis -->
<classsynopsisinfo>
<ooclass>
<classname>MongoDBRef</classname>
</ooclass>
</classsynopsisinfo>
<!-- }}} -->
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.mongodbref')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
</classsynopsis>
<!-- }}} -->
</section>
<section>
&reftitle.seealso;
<para>
Базовая документация на MongoDB лежит тут <link xlink:href="&url.mongodb.dochub.dbrefs;">databases references</link>.
</para>
</section>
</partintro>
&reference.mongo.entities.mongodbref;
</phpdoc:classref>
<!-- 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
-->