В предыдущей главе мы посмотрели, как с помощью 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);