Skip to content

Подумать как добавить в pfSQLTable возможность задавать условия по внешним ключам в m2m таблицах #9

Description

@unhandled-exception

Originally reported by: Oleg Volchkov (Bitbucket: ovolchkov, GitHub: Unknown)


Для замены конструкции:

@_allWhere[aOptions]
## aOptions.regionID
## aOptions.regions
## aOptions.houseID
## aOptions.houses
  ^cleanMethodArgument[]
  $result[^BASE:_allWhere[$aOptions]
    ^switch(true){
      ^case(^aOptions.contains[regionID]){
        and $mcID in (^valuesArray[mcID;^regions.aggregate[_fields(mcID);$.regionID[$aOptions.regionID]]])
      }
      ^case(^aOptions.contains[regions]){
        and $mcID in (^valuesArray[mcID;^regions.aggregate[_fields(mcID);$.regions[$aOptions.regions]]])
      }
    }
    ^switch(true){
      ^case(^aOptions.contains[houseID]){
        and $mcID in (^valuesArray[mcID;^houses.aggregate[_fields(mcID);$.houseID[$aOptions.houseID]]])
      }
      ^case(^aOptions.contains[houses]){
        and $mcID in (^valuesArray[mcID;^houses.aggregate[_fields(mcID);$.houses[$aOptions.houses]]])
      }
    }
  ]

— Хочется добавить одно поле для которого будет сгенерирован sql для подзапроса c IN.
— Пока достаточно только по одному ключу. Если нужны условия, то надо реализовывать логику в _allWhere.

Т.е. хочется такого:

^addLookupField[field_name;lookup_model;lookup_field;options]

@create[aOptions]
  ^addFields[$.mcID[$.primary(true)]]
  ^addLookupField[houseID;$core.mc.houses;houseID;
      $.plural[houses]
      $.selfKey[mcID] # если есть первичный ключ, то подставляем автоматом
      $.lookupKey[mcID] # если не совпадает с selfKey
  ]

...
^core.mc.all[$.houseID[$flat.houseID]]

select mcID, ... 
from table_name 
where 1=1
and [selfKey] in (select relatedKey from related_model_table where houseID in ([values]))

Подумать как быть с операторами. По идее нам подходят in и !in. $.houseID[value] <=> $.[houseID in][value].

Джанго:
https://docs.djangoproject.com/en/dev/ref/models/fields/#manytomanyfield


Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions