DrupalORM provides a programmatic ORM interface to nodes and their corresponding CCK fields.

Assume you have a content type called "page" with the following node and CCK fields...

  • Node title
  • Node body
  • CCK Field "field_desc"
  • CCK Node reference "field_ref" which points to content type "story"

You could query "page" content type in the following ways...

  'Page.nid' => 34
$nodes = orm('Page')->find(array(
  'Page.field_desc' => 'foobar',
  'Page.title' => 'hello world'
// $nodes will be an OrmNodeCollection object
print $nodes->{0}->title;
print $nodes->{1}->title;
// Or you can also do
foreach ($nodes as $node) {
  print $node->title;

Assuming the corresponding nodes exist, both of these will return an OrmNodeCollection object which contains a set of PageNode objects. Also, any story nodereferences will be populated recursively....

$nodes = orm('Page')->find(array(
  'Page.title' => 'bup'
// Prints title of corresponding Story node which is defined via CCK nodereference.
print $nodes->{0}->FieldRef->{0}->title;
// You can also do this
$nodes->{0}->FieldRef->{0}->body = 'Hello World';
// Now save the changes. There are many ways to do it...
// Method 1
// Method 2
// Method 3
// Method 4

Take note that content type names are converted to toggle case. So if you had a content type named "vacation_picture", you would access it like so...

$nodes = orm('VacationPicture')->find(...);

If you wish to search or save resources without recursion, you can do...

$nodes = orm('Page')->find(array(
  'Page.title' => 'bup'
), array(
  'recursive' => FALSE
$nodes->{0}->body = 'Hello World';
  'recursive' => FALSE

DrupalORM can also create and delete node objects in an OOP like fashion.

An example of deletion...

$nodes = orm('Page')->find(array(
  'Page.nid' => 12
// Or to delete a set of nodes

An example of creation...

$newNode = orm('Page')->create();
$newNode->setTitle('hello world');
$newNode->body = 'foobar';

Project Information