Writing data

Creating and updating nodes

With PHPCR, you never use ‘new’. The node works as a factory to create new nodes and properties. This has the nice side effect that you can not add a node where there is no parent.

Everything you do on the Session, Node and Property objects is only visible locally in this session until you save the session.

<?php
//get the node from the session
$node = $session->getNode('/data/node');

// add a new node as child of $node
$newnode = $node->addNode('new node', 'nt:unstructured'); // until we have shown node types, just use nt:unstructured as type

// set a property on the new node
$newproperty = $newnode->setProperty('my property', 'my value');

// persist the changes permanently. now they also become visible in other sessions
$session->save();


// have a reference
$targetnode = $session->getNode('/data/sibling/yetanother');

// make sure the target node is referenceable.
$targetnode->addMixin('mix:referenceable');
// depending on the implementation, you might need to save the session at
// this point to have the identifier generated

// add a reference property to the node. because the property value is a
// Node, PHPCR will automatically detect that you want a reference
$node->setProperty('my reference', $targetnode);

$session->save();

Moving and deleting nodes

<?php
// move the node yetanother and all its children from its parent /sibling to
// the new parent /sibling/child1
// the target parent must already exist, it is not automatically created
// as the move includes the target name, it can also be used to rename nodes
$session->move('/data/sibling/yetanother', '/data/sibling/child1/yetanother');

// for this session, everything that was at /sibling/yetanother is now under /sibling/child1/yetanother
// i.e. /sibling/child1/yetanother/child
// once the session is saved, the move is persisted and visible in other sessions
// alternatively, you can immediatly move the node in the persistent storage

// rename node child2 to child2_new
$workspace = $session->getWorkspace();
$workspace->move('/data/sibling/child2', '/data/sibling/child2_new');

// copy a node and its children (only available on workspace, not inside session)
$workspace->copy('/data/sibling/yetanother', '/data/sibling/child1/yetanother');

// delete a node
$session->removeItem('/data/sibling/child1/yetanother');