25 июля 2013 г.

Doctrine MongoDB

Проблема
Есть у меня документ такого типа

{
    "id": "51e939fa6803fa4a05000001",
    "user_id": 1,
    "site_id": 16,
    "url": "www.example.com/en/",
    "keywords": [
        "keyword and 4"
    ],
    "se": [
        "Google",
        "Bing Russia",
        "Google Canada",
        "Yahoo Australia"
    ]
}

я делаю удаление парочки se из документа

$SiteManager->removeSearchEngines($Site, $externalSe);

И сразу же вывод оставшихся se

$Site->getSe()

в итоге получаю

[
        "Google",
        "Bing Russia",
        "Google Canada",
        "Yahoo Australia"
    ]

Хотя в базе данные изменились (удалились), получаю я данные без изменений. Долго ковырялся, пока не воспользовался

$SiteManager->docManager->refresh($Site);

Это помогло.

Сервис отправки СМС/SMS для программистов

Недавно наткнулся на интересный сервис отправки sms-сообщений. Сервис предоставляет API, которое позволяет интегрировать отправку сообщений в свой сайт.

Тарифы у сервиса довольно вкусные. Решил воспользоваться данным сервисом. Сейчас как раз пишу один проект, думаю интегрировать отправку sms -сообщений в него.

Сервис называется SMS.RU. При регистрации в сервисе по этой ссылке http://micro.sms.ru получите скидку 10%.

Сервис достаточно удобный. Техподдержка отзывчивая. Цены приемлемые (дешевле я не нашел) .

Пользуйтесь, рекомендую.

23 июля 2013 г.

Doctrine Mongodb Запросы(find, insert, update,remove)

find() Запрос по id
$users = $dm->find(‘User’, $id);
$user = $dm->getRepository(‘User’)->find($id);

findBy – Находит множество документов по запросу
$users = $dm->getRepository(‘User’)->findBy(array(‘type’ => ‘employee’));
findOneBy – Находит Один документ по запросу
$user = $dm->getRepository(‘User’)->findOneBy(array(‘username’ => ‘jwage’));
createQueryBuilder() создать новый запрос.
$qb = $dm->createQueryBuilder(‘User’);
getQuery() исполнить запрос на получение 
$qb = $dm->createQueryBuilder(‘User’);$query = $qb->getQuery();
execute() исполнить запрос, возвращает курсор для итерации
$users = $query->execute();
getSingleResult() возвращает единственный результат по запросу
$user = $dm->createQueryBuilder(‘User’)
    ->field(‘username’)->equals(‘jwage’)
    ->getQuery()
    ->getSingleResult();
select() выбрать определенные поля
$qb = $dm->createQueryBuilder(‘User’)
    ->select(‘username’, ‘password’);
$query = $qb->getQuery();
$users = $query->execute();
distinct() получить не повторяющие значения
$ages = $dm->createQueryBuilder(‘User’)
    ->distinct(‘age’)
    ->getQuery()
    ->execute();
hydrate() возвращает масив вместо объектов
$users = $dm->createQueryBuilder(‘User’)
    ->hydrate(false)
    ->getQuery()
    ->execute();
limit() количество возвращаемых заспросов skip() смещение
$blogPosts = $dm->createQueryBuilder(‘BlogPost’)
    ->limit(20)
    ->skip(40)
    ->getQuery()
    ->execute();
sort() сортировка вывод
$qb = $dm->createQueryBuilder(‘Article’)
    ->sort(‘createdAt’, ‘desc’);
если необходима дополнительная сортировка
$query->sort(‘featured’, ‘desc’);
map() reduce()
$qb = $this->dm->createQueryBuilder(‘Event’)
    ->field(‘type’)->equals(‘sale’)
    ->map(‘function() { emit(this.userId, 1); }’)
    ->reduce(«function(k, vals) {
        var sum = 0;
        for (var i in vals) {
            sum += vals[i];
        }
        return sum;
    }»);
$query = $qb->getQuery();
$results = $query->execute();
where()
$qb = $dm->createQueryBuilder(‘User’)
    ->where(«function() { return this.type == ‘admin’; }»);
field() поле 
equals() равно
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘type’)->equals(‘admin’)
    ->field(‘active’)->equals(true);
in(array()) равно одному из значений
$qb = $dm->createQueryBuilder(‘Article’)
    ->field(‘tags.name’)->in(array(‘tag1′, ‘tag2′));
notIn(array()) не равно множеству
$qb = $dm->createQueryBuilder(‘Article’)
    ->field(‘tags.name’)->notIn(array(‘tag3′));
notEqual() не равно
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘type’)->notEqual(‘admin’);
gt() больше
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->gt(30);
gte() больше или равно
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->gte(30);
lt() меньше
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->lt(30);
lte() меньше или равно
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->lte(30);
range(10, 20) более 10 и меньше 20
$qb = $dm->createQueryBuilder(‘Account’)
    ->field(‘amount_due’)->range(10, 20);
size(0) размер массива
$qb = $dm->createQueryBuilder(‘Article’)
    ->field(‘comments’)->size(0);
exists(true) проверяет поле на наличие
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘login’)->exists(true);
type(‘integer’) проверяет тип поля возможные значения Double String, Object, Array, Binary data, Object id, Boolean, Date, Null, Regular expression, JavaScript code, Symbol, JavaScript code with scope, 32-bit integer, Timestamp, 64-bit integer, Min key, Max key
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘type’)->type(‘integer’);
all(array()) Должны возвращать все значения равны условиям
$qb = $dm->createQueryBuilder(‘User’)
    ->field(‘groups’)->all(array(‘Group 1′, ‘Group 2′));
mod(‘field’, array()) определяет остаток от деления
$qb = $dm->createQueryBuilder(‘Transaction’)
    ->field(‘field’)->mod(‘field’, array(10, 1));
set($name, $value, $atomic = true) обновляет значение
$dm->createQueryBuilder(‘User’)
    ->field(‘password’)->set(‘newpassword’)
    ->field(‘username’)->equals(‘jwage’)
    ->getQuery()
    ->execute();
setNewObj($newObj)
$dm->createQueryBuilder(‘User’)
    ->setNewObj(array(
        ‘username’ => ‘jwage’,
        ‘password’ => ‘password’,
        // … other fields
    ))
    ->field(‘username’)->equals(‘jwage’)
    ->getQuery()
    ->execute();
inc($name, $value) увеличивает значение поля
$dm->createQueryBuilder(‘Package’)
    ->field(‘id’)->equals(‘theid’)
    ->field(‘downloads’)->inc(1)
    ->getQuery()
    ->execute();
unsetField($`field) удаляет поле
$dm->createQueryBuilder(‘User’)
    ->field(‘login’)->unsetField()->exists(true)
    ->getQuery()
    ->execute();
push($field, $value) добавляет новое значение в массив
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->push(‘tag5′)
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
pushAll($field, array $valueArray) Добавляет несколько значений
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->pushAll(array(‘tag6′, ‘tag7′))
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
addToSet($field, $value) добавляет в массив значение если его нет в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->addToSet(‘tag1′)
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
addManyToSet($field, array $values) Добавляет несколько значений в массив если их нет в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->addManyToSet(array(‘tag6′, ‘tag7′))
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
popFirst($field) удаляет первый элемент в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->popFirst()
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
popLast($field) удаляет последний элемент в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->popLast()
    ->field(‘id’)->equals(‘theid’)
    ->getQuery()
    ->execute();
pull($field, $value) удаляет все элементы массива с данным значением
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->pull(‘tag1′)
    ->getQuery()
    ->execute();
pullAll($field, array $valueArray) удаляет все значения в массиве
$dm->createQueryBuilder(‘Article’)
    ->field(‘tags’)->pullAll(array(‘tag1′, ‘tag2′))
    ->getQuery()
    ->execute();
remove() Удаляет документ из коллекции
$dm->createQueryBuilder(‘User’)
    ->remove()
    ->field(‘num_logins’)->equals(0)
    ->getQuery()
    ->execute();
group(array(), array(‘count’ => 0)) выполняет операцию аналогичной SQL’s GROUP BY
$result = $this->dm->createQueryBuilder(‘DocumentsUser’)
    ->group(array(), array(‘count’ => 0))
    ->reduce(‘function (obj, prev) { prev.count++; }’)
    ->field(‘a’)->gt(1)
    ->getQuery()
    ->execute();