Skip to content

sergeytkachenko/phalcon-rest-jpa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

phalcon-rest-jpa

alt tag

Данный REST подход основываеться на описаной документации Java Spring JPA REST http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

Подробнее о PPA - http://ppa.stkachenko.org.ua/ ###Примеры использования - http://stkachenko.org.ua/?p=865###

Смысл данной библиотеки очень прост - pеализовать полный доступ к CRUD операциям основываясь на построении запросов в url строке.

Для работы данной библиотеки необходимо настроить все запросы, содержащие в себе ".*/ppa/.*" на
PPA\Rest\PpaController->crudAction()

  • Присутствие приставки /s/, говорим о том, что необходимо выбрать массив записей.
  • Например: /api/ppa/s/brands - вернет все бренды, а /api/ppa/brands - вернет первый найденный бренд.

Список реализованого PPA (Phalcon persistence api)

Keyword Sample JPQL snippet
Fetch all /api/ppa/brands/s/ Вернет все бренды
Fetch first /api/ppa/brands/ Вернет первый, попавшийся бренд
And /api/ppa/brands/findByIdAndTitle
… where x.id = :id: AND x.title = :title:
Or /api/ppa/brands/findByIdOrTitle
… where x.id = :id: OR x.title = :title:
Like /api/ppa/clients/findByNameLike
… where x.name LIKE :name:
Containing /api/ppa/clients/findByTitleContaining
… where x.title LIKE :lastName: (where :lastName: =  %lastName%)
StartingWith /api/ppa/clients/findByTitleStartingWith
… where x.title LIKE :lastName: (where :lastName:  = lastName%)
search (without columns) /api/ppa/clients/search
… where x.* LIKE :lastName: (where :lastName:  = %lastName%)
search (with columns) /api/ppa/clients/search
… where x.column1 LIKE :lastName: OR .column2 LIKE :lastName: и тд..
Передаваемые параметры должны быть переданы в camelCase
/api/ppa/findByIdAndTitleOrOldId?oldId=693&id=1&title=chery

Для выбора не только полей модели, но и ее связей, нужно указать в request параметрах fetchRelations=1

Например

/api/ppa/brands/findByTitle?fetchRelations=1&title=any

Сохранение/Создание

Сохранение записи ничем не отличаеться от ее выборки. Запрос формируется по принципу выборки еденичной сущности + суфикс /save

Например

/api/ppa/targetGroups/save

Сами атрибуты сущности (данные для сохранения) можно передавать любым из способов (GET, POST, PUT, JSON RAW BODY)

{
    "id" : 1,
    "title": "changed title"
}

Если поле id не было указано то будет создана новая запись, в обратном случае - обновиться существующая.

Сохранение/Создание связей сущности (многие ко многим)

Пример

/api/ppa/targetGroups/save

/**
 * Initialize method for model.
 */
public function initialize()
{
    $this->hasMany('id', 'ActivitiesTargetGroups', 'target_group_id', array('alias' => 'ActivitiesTargetGroups'));
    $this->hasMany('id', 'BrandsTargetGroups', 'target_group_id', array('alias' => 'BrandsTargetGroups'));
}
{
    "id" : 1,
    "title": "changed title",
    "relations": {
        "ActivitiesTargetGroups": [
            {
                "activity_id": 1, 
                "target_group_id": 1
            },
            {
                "activity_id": 2, 
                "target_group_id": 1
            }
        ],
        "BrandsTargetGroups": [
           
        ]
    }
}

В результате такаго запроса обновиться сущность targetGroups, у которой id = 1. А также ее связи ActivitiesTargetGroups и BrandsTargetGroups. Причем связь BrandsTargetGroups полностью очиститься.

Для выбора связанных записей один ко многим передайте параметр joinedRelations
Сортировка выбранных записей

Для сортировки нужно указать в request параметре &orderBy=title, или &orderBy=title|Desc, или &orderBy[]=title|Desc&orderBy[]=id

LIMIT выбранных записей

Для орезания выбранных записей нужно указать в request параметре &limit=25, или &limit=10&offset=3

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages