Работа с DBRef

Последнее обновление: 30.10.2015

В предыдущей главе мы посмотрели, как с помощью DBRef связывать одни документы с другими. В PHP также можно использовать подобную функциональность.

Ручное связывание

При ручном связывании в одном документе устанавливается в качестве значения поля id другого документа:

// новая компания
$microsoft = array("name" => "Microsoft", "year" => 1974);

$con = new MongoClient();
$db= $con-> test;

// добавляем компанию
$db -> companies -> insert($microsoft);
// устанавливаем на нее ссылку по id
$paul = array(
	"name" => "Paul",
	"age" => 26,
	"languages" => array("english"),
	"company" => $microsoft['_id']
);
// добавляем новый документ в коллекцию persons
$db -> persons -> insert ($paul);

// получим обратно объект
$doc = $db -> persons -> findOne(array("name" => "Paul"));
print_r($doc);
// получим связанную с ним компанию
$company = $db -> companies -> findOne(array('_id' => $doc['company']));
print_r($company);

После добавления в бд документ $microsoft будет содержать поле _id, по которому мы сможем установить ссылку в поле "company" => $microsoft['_id']

Автоматическое связывание

Автоматическое связывание предусматривает применение метода create для создания связи. Этот метод принимает три параметра:

  • collection: название коллекции, где хранится информация

  • id: id документа, с которым надо установить связь

  • database: название базы данных

// новая компания
$apple = array("name" => "Apple", "year" => 1976);

$con = new MongoClient();
$db= $con-> test;

$companies = $db -> companies;
$persons = $db -> persons;

// добавляем компанию
$companies -> insert($apple);

// устанавливаем на нее ссылку по id
// для получения имени коллекции используем метод getName
$companyRef = MongoDBRef::create($companies->getName(), $apple['_id']);

$steve = array(
	"name" => "Steve",
	"age" => 23,
	"languages" => array("english"),
	"company" => $companyRef
);
// добавляем новый документ в коллекцию persons
$persons -> insert ($steve);
print_r($paul);

// получим обратно объект
$doc = $persons -> findOne(array("name" => "Steve"));
print_r($doc);
// получим связанную с ним компанию
$company = MongoDBRef::get($companies -> db, $doc['company']);
print_r($company);
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850