We have moved our forum to GitHub Discussions. For questions about Phalcon v3/v4/v5 you can visit here and for Phalcon v6 here.

Проблема с save() / Trouble with save()

Я использую версию 1.3.2 на PHP 5.5 Проблема в следующем: есть модель AuthKeys, в которой каждому User соответствует 1 запись.

Есть поле cookie, которое соединяет значение куки авторизации с конкретным пользователем. Так вот, когда я пытаюсь сделать что-то такое:

$auth = AuthKeys::findFirst($user->id);
$auth->cookie = $key; // $key - переменная созданная выше
$auth->save();

Ничего не сохраняется. Совсем! Значение вообще не меняется.

Я пробовал через PHQL, но тот же результат. Изменить значение удалось только через голый запрос, но это неправильный путь.


I'm using version 1.3.2 and PHP 5.5, the problem is the following: AuthKeys is a model, which corresponds to one record. There is a field called 'cookie' that have the value of the authentication cookie of a specific user. So when I try to do:

$auth = AuthKeys::findFirst($user->id);
$auth->cookie = $key; // $key - переменная созданная выше
$auth->save();

It doesn't save anything, of course the value is not saved.

I've tried with PHQL, but I'm getting the same result.



98.9k
Accepted
answer

It seems the record cannot be saved because validation messages are being generated, are you checking them?

$auth = AuthKeys::findFirstById($user->id);
$auth->cookie = $key; // $key - переменная созданная выше
if ($auth->save() == false) {
    foreach ($auth->getMessages() as $message) {
        echo $message->getMessage();
    }
}
edited Aug '14

Да, действительно проблема оказалась в том, что не смог нормально отработать save(). Он требует заполненности поля session, но его заполнять не нужно. Как я могу указать в модели, что это поле не обязательно?


Yep, the problem was the fact he could not work normally save(). It requires field session, but it doesn't need to fill . What do I need to specify in the model that the field was not mandatory?

Class:

class AuthKeys extends \Phalcon\Mvc\Model
{
    public $id; // Integer
    public $session; // md5-string
    public $cookie; // md5-string
    public $minecraft; // md5-string

    public function columnMap()
    {
        return array(
            'id' => 'id', 
            'session' => 'session', 
            'cookie' => 'cookie',
            'minecraft' => 'minecraft'
        );
    }

    public function initialize () {
        $this->setSource('auth_keys');
        $this->hasOne("id", "User", "id");
    }

    public function getUser () {
        return $this->getRelated("User");
    }

}

Я нашёл проблему: для поля session не было указано значение по умолчаю. Я добавил в БД значение по умолчанию = NULL и всё стало работать.


I found the trouble: for field session was not specify default value. I specify default value = NULL and it's all work!