Примените условие условия только к вторичной таблице, используя leftjoin с knex.js - PullRequest
0 голосов
/ 21 января 2019

Я использую библиотеку knex.js, чтобы выбрать все строки в таблице и получить count () из вторичной таблицы.Следующий код работает нормально:

    knex.schema.raw("SET sql_mode=''").then(() => {
    knex.select('empresas.id','empresas.rut','empresas.empresa','empresas.razon_social','procesos2.id','procesos2.id_empresas','procesos2.estado')
    .from('empresas')
    .leftJoin('procesos2', 'empresas.id', 'procesos2.id_empresas')
    .count('procesos2.id as total')
    .groupBy('empresas.id')

Этот запрос показывает все строки из таблицы empresas, и если есть строки из таблицы processos2, он получает счетчик.

Нет, я хочу добавитьусловие к счету, .where('procesos2.estado', '=', 0)

Если я добавлю это условие where, я получу правильный счет, но покажу только одну строку, а не все строки из empresas.

Как добавить условие, чтобы получитьколичество всех строк в таблице empresas.

1 Ответ

0 голосов
/ 22 января 2019

В knex.js можно добавлять условия в оператор соединения, используя on () и добавляя условия с помощью andOn ().

Это работает

knex.schema.raw("SET sql_mode=''").then(() => {
    knex.select('empresas.id AS ide','empresas.rut','empresas.empresa','empresas.razon_social','procesos2.id','procesos2.id_empresas','procesos2.estado')
    .from('empresas')
    .leftJoin('procesos2', function() {
        this.on('procesos2.id_empresas ', '=', 'empresas.id')
            .andOn('procesos2.estado', '=', 0)
    })
    .count('procesos2.id as total')
    .groupBy('empresas.id')
...