Na ile jest to "czyste rozwiązanie" nie wiem, ale działa wyśmienicie

dziękuje. Z tej formy używania funkcji już korzystałem mając problem ze sprawdzaniem unikalności PrimaryKey, który jest VARCHAR, a nie INT. Metoda praktycznie taka sama. Aż dziw bierze, że na to nie wpadłem. Pewnie można by to ubrać w jakiś ładny Validator, ale na chwilę obecną nie ma na to czasu. Zrobiłem więc tą funkcję lekko sparametryzowana. Nie wiem na ile wydajnie, ale działa

Raz jeszcze dziękuję i pozdrawiam.
public function configure()
{
// (...)
$this->validatorSchema->setPostValidator(
new sfValidatorCallback
(array( 'callback' => array($this, 'checkUniqueness'), 'model' => 'ProduktPartner',
'multiple_column' => 'jezyki_logo',
'columns' => array('partner_logo', 'seria_logo', 'jezyki_logo') ))));
}
public function checkUniqueness($validator, $values, $aArguments)
{
//Dla każdej wartości z kolumny multiple_column, która może mieć wiele wartości sprawdza istnienie obiektu
foreach ($values[$aArguments['multiple_column']] as $one_of_many)
{
$criteria = new Criteria();
//Generuje kryteria oddzielnie dla każdej wartości multiple_column
foreach ($aArguments['columns'] as $column)
{
$colName = call_user_func
(array(constant($aArguments['model'].'::PEER'), 'translateFieldName'), $column, BasePeer
::TYPE_FIELDNAME, BasePeer
::TYPE_COLNAME); if($column != $aArguments['multiple_column'])
$criteria->add($colName, $values[$column]);
else
$criteria->add($colName, $one_of_many);
}
//Sprawdza w bazie istnienie takiego obiektu
$object = call_user_func
(array(constant($aArguments['model'].'::PEER'), 'doSelectOne'), $criteria);
//Jeśli istnieje wyrzuca wyjątek
{
$error = new sfValidatorError
($validator, sprintf('An object with the same %s "%s" already exist.', $aArguments['multiple_column'], $one_of_many)); throw
new sfValidatorErrorSchema
($validator, array('' => $error)); }
}
return $values; // Jeśli wyjątek nie został rzucony to skrypt zwraca tablicę z przesłanymi wartościami
}