public function set($memberApplication, $type, $name, $value = null)
 {
     $setting = $this->createQuery()->where('member_application_id = ?', $memberApplication->getId())->andWhere('type = ?', $type)->andWhere('name = ?', $name)->fetchOne();
     if (!$setting) {
         $setting = new MemberApplicationSetting();
         $setting->setMemberApplication($memberApplication);
         $setting->setType($type);
         $setting->setName($name);
     }
     $setting->setValue($value);
     $setting->save();
     return $setting;
 }
 protected function setSetting($type, $name, $value)
 {
     $object = Doctrine::getTable('MemberApplicationSetting')->createQuery()->where('type = ?', $type)->andWhere('member_application_id = ?', $this->getId())->andWhere('name = ?', $name)->fetchOne();
     if (!$object) {
         $object = new MemberApplicationSetting();
         $object->setMemberApplication($this);
         $object->setType($type);
         $object->setName($name);
     }
     $object->setValue($value);
     $object->save();
 }
<?php

include dirname(__FILE__) . '/../../bootstrap/unit.php';
include dirname(__FILE__) . '/../../bootstrap/database.php';
$t = new lime_test(2, new lime_output_color());
$t->diag('->preSave()');
$object = new MemberApplicationSetting();
$object->member_application_id = 1;
$object->name = 'foo';
$object->save();
$t->is($object->hash, md5('1' . 'application' . 'foo'), 'saved hash by ->preSave()');
$object = new MemberApplicationSetting();
$object->member_application_id = 1;
$object->type = 'user';
$object->name = 'foo';
$object->save();
$t->is($object->hash, md5('1' . 'user' . 'foo'), 'saved hash by ->preSave()');