$translation = new Translation;
$form = new TranslationForm($translation);

$form->bind($_POST, $translation);
$translation->save();

Now imagine the table "translations":

ID INT(11) NOT NULL PRIMARY KEY,
base INT(11) REFERENCES translations (ID)

Translation does not require a base translation. In this case field base should be NULL. I'm using useEmpty feature in <select> fields in Phalcon. When you call $form->bind(), Phalcon sets empty string to base. When you try to save the entity, you get SQL error. You cannot place empty string to SQL query. You must assign NULL or omit this field.

Workaround in model

public function beforeValidation()
{
   if(empty($this->base)) $this->base = null;
}

Why doesn't Phalcon guess it should be NULL and not an empty string?