Zum Inhalt

api/query

Einführung

Erweiterter API-Endpoint, über den nahezu beliebige Abfragen auf die Datenbank/Entitäten gestellt werden können. Die Abfragesyntax basiert dabei auf dem DBAL-QueryBuilder von Doctrine. Der JSON-Request (siehe Beispiele unten) wird im Contentfly CMS in eine analoge DBAL-Abfrage über den QueryBuilder umgewandelt.

Rückgabe

Die Rückgabe der Daten erfolgt im JSON-Format. Durch die DBAL-Abfrage erfolgt die Rückgabe direkt auf Datenbankebene und nicht auf Doctrine Entitäten.

Beispiele

Einfache Abfrage

1
2
3
4
5
6
7
POST: api/query

REQUEST:
{
    select: '*',
    from: entityName
}

Einfache Abfrage mit Where

1
2
3
4
5
6
7
8
POST: api/query

REQUEST:
{
    select: '*',
    from: entityName,
    where: {'field = ?': value},
}

Abfrage mit Group, Count(), Limit und Offset

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
POST: api/query

REQUEST:
{
    select: ['field1', 'field2', 'COUNT(id) AS users'],
    from: entityName
    where: {field: value},
    groupBy: field,
    having: {field: value},
    orderBy: {field: 'ASC'},
    addOrderBy: {field: 'DESC'},
    setFirstResult: 10, //Offfset
    setMaxResults: 20, //Limit
}

Join mit Where, GroupBy und Having

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
POST: api/query

REQUEST:
{
    select: ['alias1.field1', 'alias1.field2'],
    from: {entity1: alias1},
    innerJoin:['alias1', 'table2', 'alias2', 'alias1.id = alias2.field_id']
    where: {'field = ? AND field2 = ?': [value1, value2]},
    groupBy: field,
    having: {field: value}
}

Multiple Joins

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
POST: api/query

REQUEST:
{
    select: ['alias1.field1', 'alias1.field2'],
    from: {entity1: alias1},
    innerJoin:[
      ['alias1', 'table2', 'alias2', 'alias1.id = alias2.field_id']
      ['alias2', 'table3', 'alias3', 'alias2.id = alias3    .field_id']
    ]
    ...
}

Join und erweiterte Where-Abfrage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
POST: api/query

REQUEST:
{
    select: ['alias1.field1', 'alias1.field2'],
    from: {entity1: alias1},
    innerJoin:['alias1', 'table2', 'alias2', 'alias1.id = alias2.field_id']
    where: {'field1 = ? OR field2 = ?': [value1, value2]},
    andWhere: {'field = ?': value}
    groupBy: field,
    having: {field: value}
}

Referenz