YiiMongoDbSuite. Пустые(null) значения в полях

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Aleks
Сообщения: 6
Зарегистрирован: 2013.05.15, 15:35

YiiMongoDbSuite. Пустые(null) значения в полях

Сообщение Aleks »

Всем добрый день!

Прошу помощи всего сообщества, тех, кто работал с MongoDB. Проблема вот в чем:
Есть модель коллекции. В ней описаны все возможные поля:

Код: Выделить всё

class MongoPerson extends EMongoDocument {

    public $added;
    public $name;
    public $status;
    public $phone;
    public $email;
...
В контроллере делаю сохранение модели, с введенными некоторыми полями:

Код: Выделить всё

        $pers = new MongoPerson();
        $pers->added = time();
        $pers->name = 'Иванов Иван Иванович';
        $pers->status = 1;
        $pers->save();
В базе получаю:

Код: Выделить всё

{ "_id" : ObjectId("51b9a75b6e7186ac14000001"), "added" : 1371121499, "name" : "Иванов Иван Иванович", "status" : 1, "phone" : null, "email" : null }
а ожидалось:

Код: Выделить всё

{ "_id" : ObjectId("51b9a75b6e7186ac14000001"), "added" : 1371121499, "name" : "Иванов Иван Иванович", "status" : 1 }
Получается, что сохраняются ВСЕ параметры класса, и даже те которые не вводили.

Подскажите, возможно ли как-то решить эту ситуацию? Спасибо.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: YiiMongoDbSuite. Пустые(null) значения в полях

Сообщение lancecoder »

нет, ты же создаешь embeddedDocument или как он - зависимый, его свойства и есть аттрибуты они просто серилизуются
хотя попробуй перекрыть AR расширения и до сериализации выкидывай пустые, но при выборке все равно эти свойства будут
Aleks
Сообщения: 6
Зарегистрирован: 2013.05.15, 15:35

Re: YiiMongoDbSuite. Пустые(null) значения в полях

Сообщение Aleks »

lancecoder писал(а):нет, ты же создаешь embeddedDocument или как он - зависимый, его свойства и есть аттрибуты они просто серилизуются
хотя попробуй перекрыть AR расширения и до сериализации выкидывай пустые, но при выборке все равно эти свойства будут
Спасибо. Конечно, я понимаю, что AR изначально был для SQL, где это ситауция даже не рассматривалась.
Честно, я новичек в Yii, поэтому, понимаю, что выкидывать пустые как-то можно, правда как это сделать?
Вот кстати в реализации функции insert есть такой код, может где-то здесь? (файл EMongoDocument.php):

Код: Выделить всё

...
            // filter attributes if set in param
            if ($attributes !== null)
            {
                foreach ($rawData as $key => $value) {
                    if (!in_array($key, $attributes))
                        unset($rawData[$key]);
                }
            }
...
 
И еще. В YiiMongoDbSuit есть реализация софтдокумента http://canni.github.io/YiiMongoDbSuite/ ... odels.html.
Так вот там можно в классе не описывать атрибуты, а добавлять их "по ходу". Интересно, а получается в этом случае ни о каких правилах валидации не может быть и речи?

p.s. извините за длинные посты)
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: YiiMongoDbSuite. Пустые(null) значения в полях

Сообщение lancecoder »

валидировать софт аттрибуты наверняка можно, валидация же запускается тобой, а не при инициализации, так что тут все норм. Что касается выкинуть аттрибуты содержащие null, то тут тебе не только инсерт, но и апдейт надо
я думаю где то тут https://github.com/canni/YiiMongoDbSuit ... t.php#L390
Aleks
Сообщения: 6
Зарегистрирован: 2013.05.15, 15:35

Re: YiiMongoDbSuite. Пустые(null) значения в полях

Сообщение Aleks »

Еще раз спасибо! Интересное решение - может и впрямь "подшаманить" init() да и поставить свои фильтры!? Надо подумать..
И насчет валидации - нужно еще раз мануал почитать. Конечно не просто с логики реляционной на документо-ориентированную пересесть.)
Ответить