initialize(); $conn = sfDoctrine::connection(); $package = new Package(); $packageverison = new PackageVersion(); $packageverison->name = 'My Package'; $package->Version[] = $packageverison; $extra = $conn->getTable('Extra')->find(1); $package_extra = new PackageVersionExtraLink(); $package_extra->extra_id = $extra->id; $package_extra->description = 'This is a test'; var_dump($package_extra->toArray()); die(); $package->Version[0]->ExtraLink[] = $package_extra; $package->save(); ------------- # cat lib/model/Package.php hasColumn('created_at', 'integer'); $this->hasColumn('meta_description', 'string', 255); $this->hasColumn('has_published', 'boolean'); $this->hasColumn('has_draft', 'boolean'); } public function setUp() { $this->setAttribute(Doctrine::ATTR_LISTENER, new Listener_CreateTime()); $this->ownsMany('PackageVersion as Version', 'PackageVersion.package_id'); } } ----------------- # cat lib/model/PackageVersion.php hasColumn('package_id', 'integer'); $this->hascolumn('current_state', 'enum', 11, array('default' => 'Draft')); $this->setEnumValues('current_state', array(10 => 'Published', 20 => 'Approved', 30 => 'Committed', 40 => 'Draft', 50 => 'Deleted')); $this->hasColumn('created_at', 'integer'); $this->hasColumn('updated_at', 'integer'); $this->hasColumn('name', 'string', 255); } public function setUp() { $chain = new Doctrine_EventListener_Chain(); $chain->add(new Listener_CreateUpdateTime()); $this->setAttribute(Doctrine::ATTR_LISTENER, $chain); $this->hasOne('Package', 'PackageVersion.package_id'); $this->hasMany('PackageVersionExtraLink as ExtraLink', 'PackageVersionExtraLink.package_version_id'); } } --------------------- # cat lib/model/PackageVersionExtraLink.php hasColumn('extra_id', 'integer'); $this->hasColumn('package_version_id', 'integer'); $this->hasColumn('description', 'string', 255); } public function setUp() { $this->hasOne('Extra', 'PackageVersionExtraLink.extra_id'); $this->hasOne('PackageVersion', 'PackageVersionExtraLink.package_version_id'); } }