[eluser]OverZealous[/eluser]
If you are saving multiple, new objects, you always have to save the objects first. Calling $obj1->save(array($obj2, $obj3)) will only save $obj1 to the database, and the relationships between $obj1 and $obj2, and $obj1 and $obj3.
It has to be this way, or else DM would spend a lot of time checking to see if something needs to be saved to the database. Also, you can save relationships to non-complete objects this way:
Code:
$obj2->select('id')->get();
$obj1->save($obj2);
--
As for the previous discussion, about the multiple queries, it's how the field names are looked up. You'll only see the LIMIT 1 query once per model, as DataMapper has to determine which columns are available on the table. This is the standard ActiveRecord process.
If your application needs so much speed that calling one, near-instantaneous query to look up the column names is too much, then you probably shouldn't be using PHP, much less an ORM library.
DataMapper and other ORM libraries are designed to make developing code easier and faster. Most knowledgeable software developers will tell you that you should worry about application design and long-term management of code before you worry about fine-tuning for speed.